序列长度的字数错误
Word count for sequence length is wrong
我有一个 fasta 文件,如下所示:
>0011 my.header
CAAGTTTATCCACATAATGCGAATAACCAATAATCCTTTTCATAAGTCTATTCTTCATAATCTAAATCGT
TTTCAAGTACATAATTATCCTTTGCCTGTTCGTTAGTTTTATTAAAATTATACTGATCTTTCTTTTTCAT
CCCACGGGTTAAAATCTTCCTCAATCGGTGGGTTTTCTTCATGAAATTGTTTCATTTATTTGCTGTTTTT
AGTTCTCCGATTGTATAACACTTAGTTGTATTAGTGCCGGGTAGTCTATAATTAGCCTCTTTTATATACC
CACGCTTTAATAATCTGTTTACAGAATTATATAATTTGCTCTTAGACATAAAAGGAATAATTTCTCTAAG
TTTAGAAATCGTAATAAAAACGGTATTAGGTTCTTTCTTTACCCTACATCCCTTAAACTTATCCTTATAT
GTATCAGTACAAAGTATAAGAAACATAACTGAATATACTACTGAATCATCTAAACCGATTTCTTTTGCTA
AATCTTCATTTATAACCATAATTATAACGCTTTTAATTGAATTGACTCTTTAACATTTGATGTTTTAACG
AACTGATCGTATATTTCCGGATATTGTTCTTTCAGTGCTTTAGAATCAAGTGATTCACGGCTATACGCTT
TCTTCCTTGTGACTGAAATAAGTTCCCCTTTTATATTATCAGCTTTCGCCTCAGACATCAGACCTAACAA
CTGTTCTTTGAACTTGCCTAAATGTTCGTCTATCTTCTTTTGCATTTCAAGAAGTTCGTAAACGCCTTCT
TCGATATGTGCAACCTTTGCAGGCAACGACTCCAATTTAGCTACATAACTGTCTTTGCTTGCATTGTCTG
CATATCGAACTCCATTCTTACAGCAATTAAGGAATAATTCTATTTCGCTGTCCGGTATGCGTTCAACAGA
GAAAATTCCGTCCTTATCCTTGTCACCTCTTAGCCAAATTGCGATAAGTCCCTCTACTTTCAAATTTGGG
TTTTGTCTCTCGAAAAGATAGGCGTATATTGATAGCTGCCAAGACAAATAAAGCAAATCAAGTTTGTAGG
TAGTTTTAATGTCACCTAAAACGACTGATTTATCAGAGCTGCCCAAATATACTTTATCGGTCGGTGATGC
GATAAGCTCGTTATCAGTTAGAATATACTCAGATGCGATATGAATTAAACCGCTTCCGGCTTTTAAATTC
AAATAGTTCTCTCCGTAGACCGTTTCCGGTTCAATACCTTCTTTGTCGATCCTCTCAACTTCATCATGAA
CCGCTTTCCCTCTCTCAGTTGCCGATCTCAAAATATTATCCGGTATATTGTCAAGTTTGCCTGGAAATAA
我想要序列的长度(没有 header)。我试过这个:
tail -n +2 my.file | wc -c
这给了我这个输出:
1349
这是错误的,实际尺寸是1330。
我不确定发生了什么。我在想可能有某种隐藏的角色,但我不知道如何探索它。
这是因为wc
也在计算所有的换行符。
您可以使用 awk
完成此操作:
awk 'NR>1{s+=length()} END{print s}' my.file
1330
您也可以使用 tail | tr | wc
:
tail -n +2 my.file | tr -d '\n' | wc -c
1330
编辑: 在这里也添加 1 个 awk
的解决方案。
awk -v RS="" -v FS="\n" '{="";sub(/^ +/,"");gsub(/ /,"");print length([=10=])}' Input_file
或
awk -v RS="" -v FS="\n" '{="";sub(/^ +/,"");print length([=11=])}' OFS="" Input_file
或
awk -v RS= '{gsub(/^[^\n]*|\n/, ""); print length()}' Input_file
以下 awk
可能会对您有所帮助。
awk '!/^>/{sum+=length([=13=])} END{print "Length is:" sum}' Input_file
perl:
perl -0777 -nE 's/^>.*$//m; say tr/A-Z/A-Z/' file
将文件读入单个字符串,删除第一行,然后计算字母数。
bash只是,在一个脚本里,我们不得不谈编程;o)
tk="$(<my.file)" # file in variable
tk="${tk#>*$'\n'}" # suppression header '>...first\n'
tk="${tk//$'\n'}" # suppression all \n
echo ": ${#tk}" # 1330 \o/
删除header后从字符中减去行数:
tail -n +2 fasta.file | wc -lc | awk '{print -}'
我有一个 fasta 文件,如下所示:
>0011 my.header
CAAGTTTATCCACATAATGCGAATAACCAATAATCCTTTTCATAAGTCTATTCTTCATAATCTAAATCGT
TTTCAAGTACATAATTATCCTTTGCCTGTTCGTTAGTTTTATTAAAATTATACTGATCTTTCTTTTTCAT
CCCACGGGTTAAAATCTTCCTCAATCGGTGGGTTTTCTTCATGAAATTGTTTCATTTATTTGCTGTTTTT
AGTTCTCCGATTGTATAACACTTAGTTGTATTAGTGCCGGGTAGTCTATAATTAGCCTCTTTTATATACC
CACGCTTTAATAATCTGTTTACAGAATTATATAATTTGCTCTTAGACATAAAAGGAATAATTTCTCTAAG
TTTAGAAATCGTAATAAAAACGGTATTAGGTTCTTTCTTTACCCTACATCCCTTAAACTTATCCTTATAT
GTATCAGTACAAAGTATAAGAAACATAACTGAATATACTACTGAATCATCTAAACCGATTTCTTTTGCTA
AATCTTCATTTATAACCATAATTATAACGCTTTTAATTGAATTGACTCTTTAACATTTGATGTTTTAACG
AACTGATCGTATATTTCCGGATATTGTTCTTTCAGTGCTTTAGAATCAAGTGATTCACGGCTATACGCTT
TCTTCCTTGTGACTGAAATAAGTTCCCCTTTTATATTATCAGCTTTCGCCTCAGACATCAGACCTAACAA
CTGTTCTTTGAACTTGCCTAAATGTTCGTCTATCTTCTTTTGCATTTCAAGAAGTTCGTAAACGCCTTCT
TCGATATGTGCAACCTTTGCAGGCAACGACTCCAATTTAGCTACATAACTGTCTTTGCTTGCATTGTCTG
CATATCGAACTCCATTCTTACAGCAATTAAGGAATAATTCTATTTCGCTGTCCGGTATGCGTTCAACAGA
GAAAATTCCGTCCTTATCCTTGTCACCTCTTAGCCAAATTGCGATAAGTCCCTCTACTTTCAAATTTGGG
TTTTGTCTCTCGAAAAGATAGGCGTATATTGATAGCTGCCAAGACAAATAAAGCAAATCAAGTTTGTAGG
TAGTTTTAATGTCACCTAAAACGACTGATTTATCAGAGCTGCCCAAATATACTTTATCGGTCGGTGATGC
GATAAGCTCGTTATCAGTTAGAATATACTCAGATGCGATATGAATTAAACCGCTTCCGGCTTTTAAATTC
AAATAGTTCTCTCCGTAGACCGTTTCCGGTTCAATACCTTCTTTGTCGATCCTCTCAACTTCATCATGAA
CCGCTTTCCCTCTCTCAGTTGCCGATCTCAAAATATTATCCGGTATATTGTCAAGTTTGCCTGGAAATAA
我想要序列的长度(没有 header)。我试过这个:
tail -n +2 my.file | wc -c
这给了我这个输出:
1349
这是错误的,实际尺寸是1330。
我不确定发生了什么。我在想可能有某种隐藏的角色,但我不知道如何探索它。
这是因为wc
也在计算所有的换行符。
您可以使用 awk
完成此操作:
awk 'NR>1{s+=length()} END{print s}' my.file
1330
您也可以使用 tail | tr | wc
:
tail -n +2 my.file | tr -d '\n' | wc -c
1330
编辑: 在这里也添加 1 个 awk
的解决方案。
awk -v RS="" -v FS="\n" '{="";sub(/^ +/,"");gsub(/ /,"");print length([=10=])}' Input_file
或
awk -v RS="" -v FS="\n" '{="";sub(/^ +/,"");print length([=11=])}' OFS="" Input_file
或
awk -v RS= '{gsub(/^[^\n]*|\n/, ""); print length()}' Input_file
以下 awk
可能会对您有所帮助。
awk '!/^>/{sum+=length([=13=])} END{print "Length is:" sum}' Input_file
perl:
perl -0777 -nE 's/^>.*$//m; say tr/A-Z/A-Z/' file
将文件读入单个字符串,删除第一行,然后计算字母数。
bash只是,在一个脚本里,我们不得不谈编程;o)
tk="$(<my.file)" # file in variable
tk="${tk#>*$'\n'}" # suppression header '>...first\n'
tk="${tk//$'\n'}" # suppression all \n
echo ": ${#tk}" # 1330 \o/
删除header后从字符中减去行数:
tail -n +2 fasta.file | wc -lc | awk '{print -}'