проблема в сопоставлении строки при использовании l oop in bash - PullRequest
0 голосов
/ 19 апреля 2020

У меня есть два файла

file1

K00940
K02183
K03781
K13413
K13414
K13424
K13425
K13449
K14496
K14497
K14498
K14509
K14510
K14512
K17686
K20535
K20557
K20600
K20603
K20606
K20607
K20716
K20718
K20726

и

file2

  K00940 ndk; nucleoside-diphosphate kinase [EC:2.7.4.6]
            K02183 CALM; calmodulin
            K03781 katE; catalase [EC:1.11.1.6]
            K13413 MKK4_5; mitogen-activated protein kinase kinase 4/5 [EC:2.7.12.2]
            K13414 MEKK1; mitogen-activated protein kinase kinase kinase 1 [EC:2.7.11.25]
            K13424 WRKY33; WRKY transcription factor 33
            K13425 WRKY22; WRKY transcription factor 22
            K13449 PR1; pathogenesis-related protein 1

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

cat file1 |while read line;do grep $line file2 >>file3 done

, но это не рабочий файл3 пуст. Кто-нибудь может помочь в этом вопросе?

Ответы [ 2 ]

0 голосов
/ 19 апреля 2020

Я думаю, вы также можете использовать команду comm. См. man comm для более подробной информации, но вы можете просто comm -1 file1 file2. Однако это будет работать только для отсортированных файлов.

0 голосов
/ 19 апреля 2020

Комментарий правильный, или вы можете использовать fgrep -f file1 file2 > file3

-f позволяет вам указать файл для шаблонов, разделенных символами новой строки, поэтому прочитайте строки file1 для соответствия строк в file2

ОБНОВЛЕНИЕ: Теперь, когда я немного прочитал, вам даже не нужен fgrep или -F переключатель для grep. grep -f file1 file2 > file3 отлично подойдет.

...