使用另一个文本文件中的 ID 过滤大文本文件

Filter a large text file using ID in another text file

我有两个文本文件,一个文件由大约 60,000 行和 14 列组成,另一个文件的一列包含第一个文件中其中一列(第一列)的子集。我想根据文件 2 中的 ID 名称过滤文件 1。我在网上尝试了一些命令,但其中 none 没有用。这是两行文本文件的几行(我在 linux 系统上)

文件 1:

Contig100       orange1.1g013919m       75.31   81      12      2       244     14      2       78      4e-29     117   1126    435
Contig1000      orange1.1g045442m       65.50   400     130     2       631     1809    2       400     1e-156    466   2299    425
Contig10005     orange1.1g003445m       83.86   824     110     2       3222    808     1       820     0.0      1322   3583    820
Contig10006     orange1.1g047384m       81.82   22      4       0       396     331     250     271     7e-05   41.6    396     412

文件 2:

Contig1
Contig1000
Contig10005
Contig10017

请让我知道您解决这个问题的好建议。

提前致谢。

如果您使用的是 Linux/Mac,则可以在命令行上执行($ 表示命令提示符,请勿键入)。

首先,我们通过将 .* 附加到每一行,从您的 file2 创建一个 file2-patterns

$ while read line; do echo "$line .*"; done < file2 > file2-patterns

然后查看该文件:

$ cat file2-patterns 
Contig1 .*
Contig1000 .*
Contig10005 .*
Contig10017 .*

现在我们可以使用这些模式来过滤掉 file1.

中的行
$ grep -f file2-patterns file1
Contig1000      orange1.1g045442m       65.50   400     130     2       631     1809    2       400     1e-156    466   2299    425
Contig10005     orange1.1g003445m       83.86   824     110     2       3222    808     1       820     0.0      1322   3583    820

您可以使用 python 执行此操作:

with open('filter.txt', 'r') as f:
    mask = f.read()

with open('data.txt', 'r') as f:
    while True:
        l = f.readline()
        if not l:
            break
        if l.split(' ')[0] in mask:
            print(l[:-1])