如果文件1中的A列不等于文件2中的B列,请删除lin

2024-09-25 00:23:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个文件,我想删除文件1的第3列不等于文件2的第2列的行。在

文件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看起来像

^{pr2}$

所需的文件输出将是

1111    1111    rs4477212   A   A

1111    1111    rs3094315   A   A

文件1是2.4GB,文件2是21.8MB。在

提前感谢您的帮助。在


Tags: 文件mbgbexmpr2ind1ind11rs4477212
3条回答

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())

输出:

^{pr2}$
awk 'NR==FNR {f2[$2]; next} $3 in f2' file2 file1

如果要从File1中删除col3不等于File2的col2的行,则可以使用以下方法:

awk 'NR==FNR{a[$2];next}($3 in a)&&NF' file2 file1 > output.txt

相关问题 更多 >