使用另一个文本文件中的 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])
我有两个文本文件,一个文件由大约 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])