【发布时间】:2012-09-14 06:05:36
【问题描述】:
我有两个包含大量文本的大文件,我要做的是保留文件 A 中的所有行,这些行的字段与文件 B 中的字段匹配。
文件 A 类似于:
Name (tab) # (tab) # (tab) KEYFIELD (tab) Other fields
文件 B 我设法使用 cut 和 sed 以及其他东西基本上将其归结为一个列表字段。
因此,如果该行的字段与文件 B 中的行之一匹配,则目标是将文件 A 中的所有行保留在第 4 个字段中(它显示为 KEYFIELD)。(不必完全匹配,所以如果文件B有Blah,文件A说Blah_blah,没关系)
我尝试过:
grep -f fileBcutdown fileA > outputfile
编辑:好的,我放弃了。我只是强行杀了它。
有没有更好的方法来做到这一点?对于任何关心的人来说,文件 A 为 13.7MB,文件 B 缩减后为 32.6MB。
编辑:这是文件 A 中的示例行:
chr21 33025905 33031813 ENST00000449339.1 0 - 33031813 33031813 0 3 1835,294,104, 0,4341,5804,
文件B中的示例行被删减:
ENST00000111111
【问题讨论】:
-
在您的第一句话中,您说文件大小超过 400 MB,但在您的最后一句话中,它们只有约 50 MB。 45分钟后
outputfile的内容是什么?顺便说一句,CPU 不会是这里的瓶颈,但慢速/快速硬盘驱动器会产生很大的不同。 -
啊,我应该更清楚。削减之前的文件 B 是 400MB+。在我扔掉所有我不需要的东西之后,它是 32.6MB。这只是一个 7200rpm 的驱动器,当我少做输出文件时,输出文件是……空的。废话。编辑了原始帖子以使其更清晰。
标签: linux bash unix terminal grep