2012-05-14 2 views
2

У меня есть два файла, файл А выглядит следующим образом:с использованием AWK для выбора строки в файле A, основанный на поиске матчей в файле 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|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.

Cheers.

ответ

4
awk 'FNR == NR {keys[$1]; next} $3 in keys || $6 in keys' fileB fileA 
+0

Отлично. Спасибо. – user1308144

2

Я бы использовал awk-решение, так как он должен только один раз проверять каждый файл, но вот альтернатива.

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

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

  • Нет связанных вопросов^_^