我想计算每个对象(这里GeneID:1
,gi|479
,nf|NZ_AC14
)的所有字符(ACGT),以便我知道每个对象的长度(不需要计算A的数量,C的数量..)
>GeneID:1
ATGCGTTTGCGTTTGCAAATCGACTAGCTTTTGGCCCAAAGCGTGCTGCAAAAGTATGGA
AGTAAAGCTACCGTACGTAGCTAAGCCTACCGATCGATCGATCGATCGACGCCCCCCCCC
>gi|479
ATGGATTGGATGGAATCACAATTCAAGACATGTACGCATGGCTGCGACTGGAAG
>nf|NZ_AC14
ATGGCTAGATATGTCGTATGTTGGATGTTCACCATCAACAATCCCG
我有这样的多个文件,我想使用bash命令,以便一切都是自动化的,但我甚至不知道从哪里开始这样做(大多数情况下,我只会在{{ 1}})
所需的输出是:
>
但如果我只有这个数字也可以。
由于
答案 0 :(得分:0)
使用awk:
awk -v RS='>[^\n]+' 'oRT{gsub("\n","");print oRT,length()}{oRT=RT}' file
记录分隔符设置为以>
开头的基因名称。通过删除换行符将记录的所有字段连接在一起。然后打印记录的长度。
变量oRT
设置为捕获前一行的记录终止符RT
。
答案 1 :(得分:-1)
您可以使用以下awk
命令:
<强> INPUT:强>
$ more input
>GeneID:1
ATGCGTTTGCGTTTGCAAATCGACTAGCTTTTGGCCCAAAGCGTGCTGCAAAAGTATGGA
AGTAAAGCTACCGTACGTAGCTAAGCCTACCGATCGATCGATCGATCGACGCCCCCCCCC
>gi|479
ATGGATTGGATGGAATCACAATTCAAGACATGTACGCATGGCTGCGACTGGAAG
>nf|NZ_AC14
ATGGCTAGATATGTCGTATGTTGGATGTTCACCATCAACAATCCCG
<强>命令:强>
awk '/^>/{if(NR>1){print tmp OFS l;} l=0; tmp=$0; next}{l+=length($0)}END{print tmp OFS l;}' input
>GeneID:1 120
>gi|479 54
>nf|NZ_AC14 46
<强>说明:强>
/^>/{if(NR>1){print tmp OFS l;} l=0; tmp=$0; next}
当您到达以>
开头的行时,如果是打印tmp
和{{1}的内容,则检查它不是第一行};您在l
和l
处在该行的内容中发起0
tmp
您可以计算其他行数,并将其添加到{l+=length($0)}
l
当您到达文件末尾时,您打印变量内容以处理最后一组