2

我有两个文件,文件 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 简单地实现吗?

干杯。

4

2 回答 2

4
awk 'FNR == NR {keys[$1]; next} $3 in keys || $6 in keys' fileB fileA
于 2012-05-14T14:01:21.767 回答
2

我会使用 awk 解决方案,因为它只需要检查每个文件一次,但这里有一个替代方案。

{ join -1 3 <(sort -k3 fileA) <(sort fileB) 
  join -1 6 <(sort -k6 fileA) <(sort fileB)
} > output
于 2012-05-14T14:31:20.990 回答