并行sed与组捕获

时间:2013-05-08 09:32:55

标签: linux sed parallel-processing gnu-parallel fastq

我必须处理一个大文件,并且在使用sed,sort等时,一直在阅读有关并行命令以尝试使用1个以上核心处理器的文件。所以我首先想要改变每四个的第一行(因为这种文件的命名约定 - FastQ格式)。

例如,这将是一组四人,我想修改第一行:

cat sbcc073_pcm_ill_all.musket_default.fastq | head -4

@HWUSI-EAS1752R:29:FC64CL3AAXX:8:65:16525:4289_1:N:0:ACTTGA
GCGAGAGAATGGATGAGTTGATAGTTACACAGCGGTTTTGATATACTGATGCCTTGTATATGTTCGT
+
GHHHHHHHHHHGGEEGEDGGGGH=HHHHHEGDBFF8BED=BAEEEAHHHBD>GGGEEHHHFE>GG@E

使用下一个命令,我完成了工作:

cat sbcc073_pcm_ill_all.musket_default.fastq | head -4 | sed 's#^\(@.*\)_\([12]\).*#\1/\2#'

@HWUSI-EAS1752R:29:FC64CL3AAXX:8:65:16525:4289/1
GCGAGAGAATGGATGAGTTGATAGTTACACAGCGGTTTTGATATACTGATGCCTTGTATATGTTCGT
+
GHHHHHHHHHHGGEEGEDGGGGH=HHHHHEGDBFF8BED=BAEEEAHHHBD>GGGEEHHHFE>GG@E

然而,当使用并行时,似乎无法识别组捕获括号:

cat sbcc073_pcm_ill_all.musket_default.fastq | head -4 | parallel --pipe sed 's#^\(@.*\)_\([12]\).*#\1/\2#'

@HWUSI-EAS1752R:29:FC64CL3AAXX:8:65:16525:4289_1:N:0:ACTTGA
GCGAGAGAATGGATGAGTTGATAGTTACACAGCGGTTTTGATATACTGATGCCTTGTATATGTTCGT
+
GHHHHHHHHHHGGEEGEDGGGGH=HHHHHEGDBFF8BED=BAEEEAHHHBD>GGGEEHHHFE>GG@E

当删除反斜杠或使用sed -r时,命令告诉我:

/bin/bash: -c: line 3: syntax error near unexpected token `('
/bin/bash: -c: line 3: `             (cat /tmp/60xrxvCIRX.chr; rm /tmp/60xrxvCIRX.chr; cat - ) | (sed s#^(@.*)_([12]).*#\1/\2# );'

有人可以对此有所了解吗?

非常感谢

1 个答案:

答案 0 :(得分:1)

parallel --pipe "sed 's#^\(@.*\)_\([12]\).*#\1/\2#'"

尝试在双引号内插入完整命令,如下所示。