首页 > 解决方案 > 使用 bash 计算模式之间的行/字符

问题描述

我想计算每个对象的所有字符(ACGT)(这里,,,)GeneID:1gi|479以便nf|NZ_AC14我知道每个对象的长度(无需计算 A 的数量,C 的数量..)

>GeneID:1
ATGCGTTTGCGTTTGCAAATCGACTAGCTTTTGGCCCAAAGCGTGCTGCAAAAGTATGGA
AGTAAAGCTACCGTACGTAGCTAAGCCTACCGATCGATCGATCGATCGACGCCCCCCCCC
>gi|479
ATGGATTGGATGGAATCACAATTCAAGACATGTACGCATGGCTGCGACTGGAAG
>nf|NZ_AC14
ATGGCTAGATATGTCGTATGTTGGATGTTCACCATCAACAATCCCG

我有多个这样的文件,我想使用 bash 命令,以便一切都自动化,但我什至不知道从哪里开始执行此操作(主要是在以 开头的行之后我将如何计算>

所需的输出将是:

>GeneID:1 121
>gi|479 54
>nf|NZ_AC14 47

但如果我只有数字也可以。

谢谢

标签: regexlinuxbash

解决方案


使用 awk:

awk -v RS='>[^\n]+' 'oRT{gsub("\n","");print oRT,length()}{oRT=RT}'  file

记录分隔符设置为以 . 开头的基因名称>。通过删除换行符将记录的所有字段连接在一起。然后打印记录的长度。

该变量oRT设置为捕获RT前一行的记录终止符。


推荐阅读