grep匹配大文件后返回n行数

时间:2015-05-17 19:56:55

标签: bash grep pattern-matching large-files

我有两个大文件。一个文件有一个我在另一个文件中grepping的行列表。我发现下面的代码很适合在短测试文件中匹配后将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

1 个答案:

答案 0 :(得分:3)

使用fgrep代替grep。如果你不需要匹配正则表达式,那就快得多:

fgrep -A 3 -xf File1 File2

确保您的模式文件File1不包含重复项也可能有所帮助:

sort -u File1 >File1_new