Вопрос по – использование awk для выбора строк в файле A на основе поиска совпадений в файле B

2

У меня есть два файла, файл А выглядит так:

1       101427      GENE|ACT-A      1       101589      GENE|ACT-B    0.0357
1       101427      GENE|ACT-A      1       101785      GENE|ACT-C    0.6357
1       101427      GENE|TAD-J      1       101437      GENE|TAD-L    0.8967
1       101427      GENE|TAD-J      1       158988      GENE|TAD-O    0.0067
1       101427      GENE|TAD-J      1       159999      GENE|TAD-V    0.5427
1       101427      GENE|POL-D      1       101437      GENE|POL-H    0.2347

и файл B выглядит так:

GENE|ACT-A
GENE|TAD-L
GENE|POL-D

Я хотел бы выбрать строки в файле A, где столбец 3 или столбец 6 имеют совпадение в файле B. В приведенном выше примере выходные данные будут выглядеть следующим образом:

1       101427      GENE|ACT-A      1       101589      GENE|ACT-B    0.0357
1       101427      GENE|ACT-A      1       101785      GENE|ACT-C    0.6357
1       101427      GENE|TAD-J      1       101437      GENE|TAD-L    0.8967
1       101427      GENE|POL-D      1       101437      GENE|POL-H    0.2347

Может ли это быть достигнуто просто с некоторым awk.

Приветствие.

Ваш Ответ

2   ответа
4
awk 'FNR == NR {keys[$1]; next} $3 in keys || $6 in keys' fileB fileA
Превосходно. Спасибо user1308144
2

так как оно проверяет каждый файл только один раз, но вот альтернатива.

{ join -1 3 <(sort -k3 fileA) <(sort fileB) 
  join -1 6 <(sort -k6 fileA) <(sort fileB)
} > output

Похожие вопросы