比较char到字符串

时间:2015-04-28 13:30:33

标签: shell

这是我写的fastq脚本的一部分。在脚本的开头,我使用while循环读取文件。

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

该文件由4行批次组成(Sequence_name,Sequence,Quality_name,Quality_sequence)

类似的东西;

@HWI-ST330:304:H045HADXX:1:1101:1162:2055
NAGAACTTGGCGGCGAATGGGCTGACCGCTTCCTCGTGCTTTACGGTATCGCCGCTCCCGATTCGCAGCGCATCGCCTTCTATCGCCTTCTTGACGAGTT
+
#1=DDFFFHHHGHIJJJJIJJJGEGGAFGBHHEHGFBFFDEDECDDA==CB@BDDDDD?;B-<CBDDD>BBBBDDB5<@DDDCDDB@-9ACDDDDB?B<?

这部分是剧本的一部分,给我提问

iq=1
fastq="'!\"#$%&\'\(\)*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_\`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;@;9?DDCD8AHGEF@84ADB?CD>3@CAACBBBDD@@@??90))5055(22-95<-5(:<ACBB@?8?

它没有收到消息:

invalide format sequence quality

非常感谢帮助我找到原因??

1 个答案:

答案 0 :(得分:0)

在if测试中尝试引用"$charSQ"? 引用起作用的原因是因为没有它,$charSQ中的字符被解释为正则表达式。引用它并将其视为文字字符串   - Etan Reisner