我有两个文件,文件A看起来像这样:
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简单地实现。
干杯。
答案 0 :(得分:4)
awk 'FNR == NR {keys[$1]; next} $3 in keys || $6 in keys' fileB fileA
答案 1 :(得分:2)
我会使用awk解决方案,因为它只需要检查一次文件,但这里有一个替代方案。
{ join -1 3 <(sort -k3 fileA) <(sort fileB)
join -1 6 <(sort -k6 fileA) <(sort fileB)
} > output