2014-08-30 2 views
1

довольно простой вопрос. У меня есть два файла с разделителями табуляции. Первые из них состоят мои многочисленные колонны, а первые и вторые столбцы в формате, как показано ниже:awk extract lines с ключевыми словами

RT034_00001 xxxx 
RT034_00002 sss 
RT034_00003 rrrr 
RT034_00004 yrurf 

Я хотел бы получить строки, где первые значения столбцов соответствуют следующим ключевым словам второго файла из одного столбца , например:

RT034_00002 
RT034_00004 

Таким образом, в конце концов, я хотел бы прийти с

RT034_00002 sss 
RT034_00004 yrurf 

Любой способ сделать это?

ответ

2

Вы можете сделать это путем создания массива, ключи которого содержимое второго файла, а затем печатать соответствующие строки в первой:

awk 'NR==FNR {a[$1]; next} $1 in a' second_file first_file 
+1

'' ++ не очень нужны здесь, так как мы никогда не смотреть на счет. Хотя, признаюсь, я бы тоже это сделал. ';)' –

+1

Я забыл, что достаточно просто обратиться к ключу. Я отредактировал его. –

+1

Я запускаю awk 'NR == FNR {a [NR] = $ 1; next} $ 1 в файле 2.txt 1.txt> 3.txt. Дает пустой файл. Что я делаю неправильно? – user61677

0

grep -f 2ndfile.txt 1stfile.txt

будет работать, если

1stfile .txt is

RT034_00001 xxxx 
RT034_00002 sss 
RT034_00003 rrrr 
RT034_00004 yrurf 

и 2ndfile.txt является

RT034_00002 
RT034_00004 

enter image description here

+0

Я проверил это. Однако он снова возвращает содержимое первого файла – user61677

+0

Вы уверены, что он работает в моей оболочке – Anoop

+0

Да, он дает содержимое файла с разделителем fisrt – user61677

Смежные вопросы