2013-05-08 187 views
1

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

例如,这将是一组4个,我想修改第一行:

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>[email protected] 

随着下一个命令我已经完成的工作:

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>[email protected] 

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

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>[email protected] 

当移除回退骨灰或使用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#);' 

任何人都可以对此有所了解吗?

非常感谢你

+0

@fedorqui谢谢 – cantalapiedra 2013-05-08 09:36:21

+0

你应该考虑使用Perl模块['Bio :: Index :: Fastq'](http://doc.bioperl.org/releases/bioperl-current/bioperl-live/Bio/Index/Fastq .html) – mvp 2013-05-08 09:50:00

回答

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

尝试插入这样的双引号中的完整命令。

+0

谢谢。为什么我需要在这里寻找'$'? parallel --pipe“perl -lne'if($。%4 == 1){s/^(@。*)_([12])。*/\ $ 1 \/\ $ 2 /; print}'” – cantalapiedra 2013-05-08 12:04:56

+0

阅读'man parallel'中的QUOTING部分 – 2013-05-10 11:08:52