運行bowtie2時出現以下錯誤:
錯誤:讀取了HWI-D00466:116:CC62WANXX:3:1102:7363:63646 1:N:0:GCACACG的更多信息字符而不是質量值。
我現在想從fastq文件中刪除所有此特定讀取的4行。
如何使用awk或sed執行此操作?
運行bowtie2時出現以下錯誤:
錯誤:讀取了HWI-D00466:116:CC62WANXX:3:1102:7363:63646 1:N:0:GCACACG的更多信息字符而不是質量值。
我現在想從fastq文件中刪除所有此特定讀取的4行。
如何使用awk或sed執行此操作?
不要這樣做::您的FASTQ文件格式錯誤或FASTQ記錄跨越四行以上,這在FASTQ中是允許的。有關FASTQ解析中可能出問題的詳細說明,請參見例如 http://biopython.org/DIST/docs/api/Bio.SeqIO.QualityIO-module.html#FastqGeneralIterator。。 p>
如果FASTQ格式錯誤,那麼您應該首先問自己這是怎麼發生的,並解決問題的根源。如果記錄是有效的FASTQ,則建議使用例如 FastqGeneralIterator
解析讀取的內容,然後將解析的結果以每記錄4行的形式轉儲回FASTQ。
如果您100%確信只讀行有4行(它們可以有更多行),則可以使用以下 sed
命令:
sed -i。 bak'/ ^ @ HWI-D00466:116:CC62WANXX:3:1102:7363:63646 1:N:0:GCACACG /,+ 3d'
-i。 bak
使 sed
修改原始文件並創建具有相同名稱和擴展名 .bak
的備份副本。該命令僅表示“刪除與模式匹配的行和接下來的三行”。
在我可以的時候,我喜歡本著UNIX工具的精神逐行進行文件處理。您可以使用 paste
將Fastq文件中的4行讀入4個製表符分隔的值中,然後使用 grep
過濾掉相關記錄。 (然後,您只需將製表符變回換行符即可。)
粘貼----< reads.fastq \ | grep -v'HWI-D00466:116:CC62WANXX:3:1102:7363:63646' tr'\ t''\ n'\ > reads-fixed.fastq
但是,Fastq文件中的其他讀取也有可能損壞,在這種情況下,最好用Python或其他某種語言編寫腳本,該腳本會丟棄所有讀取長度與質量字符串長度不匹配的讀取。
但是,當然最重要的問題是:第一個數據如何損壞?地點?該文件來自哪裡,並對它執行了哪些預處理步驟?擺脫這種讀取(或序列/質量長度不匹配的所有讀取)會為您解決問題嗎?這些不是我們可以為您解答的問題,但可能值得您提供很好的答案。 :-)
這是一個 awk
單行代碼,可以正常工作,與 bioawk
答案不同。
這會刪除所有fastq記錄實例,其中seq和qual字段的長度不匹配。同樣,附加 |
zcat bad_file.fq.gz | gzip >filtered.fastq.gz
以gzip輸出。 awk'{pos = NR%4; if(pos == 1){h = $ 0}否則if(pos == 2)\ {s = $ 0} else if(pos == 3){c = $ 0} else if(pos == 0)\ {q = $ span> 0; if(length(q)== length(s)){printf(“%s \ n%s \ n%s \ n%s \ n”,h,s,c,q)}}''
在前兩行的末尾刪除 \
字符,以使其易於粘貼到終端中。
此處是的較短版本@terdon
zcat file.fastq.gz也是如此。 awk'{record [++ k] = $ 0; if(NR%4 == 2){slen = length($ 0)}否則if(NR%4 == 0){if(length($ span> 0)== slen){for(i record) {print record [i]}} k = 0; }}'
要對此進行概括以刪除不具有相同長度的讀段和序列質量的所有讀段,可以使用此bioawk單線:
bioawk -cfastx'{if(length ( $ seq)== length($ span> qual)} {printf(“ @%s%s \ n%s \ n + \ n%s \ n”, $ name,$ span>註釋, $ seq,$ span> qual)}}'my_fastq.gz
這會剝離“ fastq註釋字段”中的任何內容, +
,但幾乎幾乎沒有任何內容。
附加 | gzip >已對上述命令進行了filter.fastq.gz
過濾,以gzip輸出。