2015-04-28 312 views
1

這是我寫的fastq腳本的一部分。在腳本開始時,我使用while循環讀取文件。將char與字符串進行比較

while read Sequence_Name && read Sequence && read Quality_name && read Quality_sequence 

該文件是一個由4線批次(SEQUENCE_NAME,序列,Quality_name,Quality_sequence)

類似的東西;

@HWI-ST330:304:H045HADXX:1:1101:1162:2055 
NAGAACTTGGCGGCGAATGGGCTGACCGCTTCCTCGTGCTTTACGGTATCGCCGCTCCCGATTCGCAGCGCATCGCCTTCTATCGCCTTCTTGACGAGTT 
+ 
#[email protected]?;B-<CBDDD>BBBBDDB5<@[email protected]?B<? 

這部分是劇本給我的問題

iq=1 
fastq="'!\"#$%&\'\(\)*+,-./:;<=>[email protected][\\]^_\`abcdefghijklmnopqrstuvwxyz{|}~" 

until [ $iq -ge ${#Quality_sequence} ] 
       do 
        charSQ=$(expr substr $Quality_sequence $iq 1) 
        if [[ $fastq =~ $charSQ ]] ; then 
        let iq++ 
        else 
        echo "invalide format sequence quality" 
        fi 
        done 

問題的部分是根據輸入它不會做的作業。例如

使用此輸入:

@SRR1350630.9.1 HWUSI-EAS753_0012:8:1:3888:945 length=22 
GAGGTAGTAGATTGTATAGTTA 
+SRR1350630.9.1 HWUSI-EAS753_0012:8:1:3888:945 length=22 
KKJJNH]NNNNNNN________ 

它的工作,但這些投入

@SRR1350630.9.1 HWUSI-EAS753_0012:8:1:3888:945 length=22 
GAGGTAGTAGATTGTATAGTTA 
+SRR1350630.9.1 HWUSI-EAS753_0012:8:1:3888:945 length=22 
KKJJNH[NNNNNNN________ #replacing ] by [ give me opposite result 

@HWI-ST330:304:H045HADXX:2:2111:20110:84312 
GTCGAGGTGCCGTAAAGCACTAAATCGGAACCCTAAAGGGAGCCCCCGATTTAGAGCTTGACGGGGAAAGCCGGCGAACGTGGCGAGAAAGGAAGGGAAG 
+ 
@@<FFFFDFFH>DEGFEGIJGJIJD9;CFCG;@;[email protected]?CD>[email protected]@@@??90))5055(22-95<-5(:<[email protected]?8? 

它不會因爲我得到的消息:

invalide format sequence quality 

非常感謝很多幫助我找到原因?

+0

嘗試在if測試中引用'「$ charSQ」''此外,如果您試圖查明是否有任何無效字符在行中,您可以這樣做,而不用逐字符地搜索更簡單(反轉)的正則表達式匹配。只需在有效字符中創建(否定'^')字符類並測試它是否與字符串匹配。 –

+0

謝謝Etan引用「$ charSQ」似乎已經完成了至少使用我的測試文件,只有50行。 – Papy

+0

引用作品的原因是因爲沒有它,$ charSQ中的字符被解釋爲正則表達式。引用它,它被視爲一個文字字符串。但你應該嘗試我的另一個建議,因爲它將在大文件/行上執行*更好。 –

回答

0

嘗試在if測試中引用"$charSQ"
引用作品的原因是因爲沒有它,$charSQ中的字符被解釋爲正則表達式。引用它,它被視爲一個文字字符串。
- Etan Reisner

相關問題