Получение строки из файла .anno, только если в текстовом файле присутствует значение столбца. - PullRequest
1 голос
/ 27 апреля 2020

Я действительно новичок ie со скриптами, а также со стеком, поэтому извините, если мой вопрос глуп или неуместен.

Я должен выполнить задачу в Bash.

У меня есть файл DATA.anno, подобный этому:

ID POP LOCALITY
1  Apu Italy
2  Apu Italy
3  Tir Albania
4  Tir Albania
5  Ber Germany
6  Ber Germany

, и у меня есть pop.txt файл, который содержит два имени населения, присутствующего во втором столбце предыдущего файла:

Apu
Ber

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

ID POP LOCALITY
1  Apu Italy
2  Apu Italy
4  Ber Germany
5  Ber Germany

Я пробовал использовать этот скрипт, но, похоже, он не работает:

cat pop.txt | while read line; do grep $line DATA.anno | cut -f 2,3 >> outputfile.txt

1 Ответ

1 голос
/ 27 апреля 2020

Не могли бы вы попробовать следующее.

awk 'BEGIN{print "ID POP LOCALITY"} FNR==NR{array[$0];next} ($2 in array)'   pop.txt data.anno

Объяснение: Добавление подробного объяснения кода.

awk '                         ##Starting awk program from here.
BEGIN{                        ##Starting BEGIN section from here.
  print "ID POP LOCALITY"     ##Printing headers here.
}
FNR==NR{                      ##Checking condition FNR==NR which will be TRUE when first Input_fie is being read.
  array[$0]                   ##Creating array with index of current line.
  next                        ##next will skip all further statements from here.
}
($2 in array)                 ##Checking condition if current line 2nd field is present in array then print that line.
'   pop.txt data.anno         ##Mentioning Input_file names here.
...