0

2 つのファイルがあり、ファイル 1 の列 3 がファイル 2 の列 2 と等しくない行をファイル 1 から削除したいと考えています。

ファイル1は次のようになります

1111    1111    exm-IND1-200449980  I   I

1111    1111    exm-IND1-201453487  I   I

1111    1111    rs4477212   A   A

1111    1111    rs3094315   A   A

1111    1111    exm-IND11-102094357 D   D

ファイル2は次のようになります

1   rs4477212   0   82154

1   rs3094315   0   752566

1   rs3131972   0   752721

1   exm2268640  0   762320

1   rs12562034  0   768448

望ましいファイル出力は

1111    1111    rs4477212   A   A

1111    1111    rs3094315   A   A

ファイル 1 は 2.4GB、ファイル 2 は 21.8MB です。

よろしくお願いします。

4

5 に答える 5

9
awk 'NR==FNR {f2[$2]; next} $3 in f2' file2 file1
于 2013-06-10T13:09:50.370 に答える
2

col3 が File2 の col2 と等しくない File1 から行を削除する場合は、次のようにします。

awk 'NR==FNR{a[$2];next}($3 in a)&&NF' file2 file1 > output.txt
于 2013-06-10T13:12:32.883 に答える
1

Pythonでの解決策:

import os
with open('file1') as f1, open('file2') as f2, open('f3', 'w') as f3:
    s = set(line.split()[1] for line in f2 if line.strip())
    for line in f1:
        if line.strip() and line.split()[2] in s:
            f3.write(line)
os.rename('f3', 'file1')
print (open('file1').read())

出力:

1111    1111    rs4477212   A   A
1111    1111    rs3094315   A   A
于 2013-06-10T13:13:02.137 に答える