2013-05-08 178 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