我有一个两个文本文件,一个文件由大约60,000行和14列组成,另一个文件包含一个列,其中包含第一个文件中其中一列(第一列)的子集。我想根据文件2中的ID名称过滤文件1.我在网上尝试了一些命令,但没有一个没用。这是几行两个文本文件(我在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
请告诉我你解决这个问题的好建议。
提前致谢。
答案 0 :(得分:1)
您可以使用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])
答案 1 :(得分:0)
如果您使用的是Linux / Mac,则可以在命令行中执行此操作($
符号化命令提示符,不要键入它。)
首先,我们通过将file2-patterns
附加到每一行,从file2
创建.*
:
$ 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