2

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

これは、いくつかのぎこちない方法で簡単に達成できますか。

乾杯。

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

各ファイルを 1 回だけ検査する必要があるため、awk ソリューションを使用しますが、別の方法があります。

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