【发布时间】:2015-05-17 19:56:55
【问题描述】:
我有两个大文件。一个文件有一个我在另一个文件中搜索的行列表。我发现以下代码可以很好地提取 File2 中的匹配行以及简短测试文件中匹配后的 3 行。
当我尝试在大文件(File1 为 1500 万行,File2 为 6300 万行)上运行相同的代码时,可以理解的是,该过程需要很长时间。
有没有办法更快地做到这一点?
代码:
grep -A 3 -xf File1 File2
File1 数据示例:
@M02465:48:000000000-A94WY:1:1101:15033:1350 1:N:0:0
@M02465:48:000000000-A94WY:1:1101:16062:1339 1:N:0:0
@M02465:48:000000000-A94WY:1:1101:15860:1331 1:N:0:0
@M02465:48:000000000-A94WY:1:1101:15810:1334 1:N:0:0
File2 数据示例:
@M02465:48:000000000-A94WY:1:1101:15860:1331 1:N:0:0
TGAGTCACTGGT
+
BBCBBFFFFFFD
@M02465:48:000000000-A94WY:1:1101:15655:1332 1:N:0:0
TCCGACACAATT
+
ABB3ADDBFAFF
@M02465:48:000000000-A94WY:1:1101:15831:1332 1:N:0:0
GACTTGGTATTC
+
A111>1C113B@
@M02465:48:000000000-A94WY:1:1101:15598:1332 1:N:0:0
CCTCGTTCGACT
+
BCCCCDDFCBCD
@M02465:48:000000000-A94WY:1:1101:15810:1334 1:N:0:0
GCTGCTGAGCAT
+
>111111BF111
@M02465:48:000000000-A94WY:1:1101:15895:1334 1:N:0:0
CCTCGTTCGACT
+
>A1>>1>C11?>
@M02465:48:000000000-A94WY:1:1101:16015:1334 1:N:0:0
AATCAGTCTCGT
+
AAAA?@B@BD1>
@M02465:48:000000000-A94WY:1:1101:15715:1335 1:N:0:0
AATCAGTCTCGT
+
BCBCCFFFFFFC
@M02465:48:000000000-A94WY:1:1101:15455:1335 1:N:0:0
AGGCTACACGAC
+
AABAAFFFFBBB
【问题讨论】:
-
当然需要很长时间。您可以测试ack 等效于 grep
-
@maggick:
ack可以比grep更快,因为它避免了在无用文件中的搜索。这在这里无济于事。实际上,GNUgrep是为此最精心优化的工具之一。 -
好的,@lcd047 的 fgrep 响应似乎是最好的。
-
你能压缩这两个文件并上传到某个地方来测试吗?
-
这是对未索引文件最好的处理方式。
标签: bash grep pattern-matching large-files