2012-05-14 62 views
2

我有两个文件,文件中的是这样的:,基于文件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来实现。

干杯。

回答

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