grep字符串和上子字符串的和值

我有一个file.fasta像这样:

>NODE_1_length_4203_cov_583903
CCCCCAGTAATTGTGCTGCGCGGCGATGCTAACAAGTTAAAATGCTATCGCTGAGCTAAG
AAAAAGCATGGAAGCTTGGTAAAGTactACAGTactACGTGAATGTaccATCAGATTGTG
TTTGTTAGTCGCGCTTTTTTTTTTTTGGAATTTTTTGGAATTTTTTTTGCGCTAACAacc
TCCTGCCGTTTTGCCCGTGCATATCGGTCACGAACAAATCTGATTactAAACACAGTAGC
CACGGGTGGTAAGAGCAGC
.
.
.
>NODE_2_length_1959_cov_102497
ATATAAAAAAAAAAGGAactCCAAAATGCAAAAAATGTACAAATCTAGAactCAAAATCA
TGAATTAACAAAAAAAAAAGCCCAAAAGAAAAGCATCactTGGAATGCAAGAATTTCATC
ATGGAACATAAAAATATAATGAAAATATAACAATCATGGAAGGCAactGTCATCAAATAA
CAAATCTGAAAAAAATCTCAATGCATCAAGAAAAAACAGAAGCGGTAAAAGCCGTTGacc
TTCTTTGCCTAATGAAATAGAAACAATGCAGAAGTACATCCTGTaccTactGACactTAG
ATGTTGATGCTCCTGTTGTTACACGGGTGGTAAGAGCAGCTCTGGactCGGCGCGCCGTT
TTGGAGGTTGGGTGGATCCTAGTCCaccTGGAAAAATGGCCACACAAAGGGTGTCTAGAA
.
.
.

我想查找特定字符串的所有匹配项(例如“ CACGGGTGGTAAGAGCAGC”) 我通过使用grep来做到这一点,例如:

grep -E "CACGGGTGGTAAGAGCAGC" file.fasta

然后我要对所有出现的“ cov”值求和。因此,脚本必须查找出现的内容,并且对于每个出现的内容都必须向上移动到以“>”(或包含单词“ cov” ...是相同的...)开头的更近的行,并可能将其打印为像这样的列表:

>NODE_1_length_4203_cov_583903
>NODE_2_length_1959_cov_102497

,然后将cov的值求和,如下所示: 583903 + 102497 =686400‬

如果您愿意,它甚至可以在一种解决方案中完成所有操作,例如: 查找出现的事件,然后对找到的所有出现的事件求和所有cov参数的值(相对于以“>”开头的每个出现在上一行的值)。

zhourqdl 回答:grep字符串和上子字符串的和值

awk是一个不错的选择(在GNU awk上经过测试的代码下方)

$ awk '/^>/{n=split($0,a,"_")} /CACGGGTGGTAAGAGCAGC/{sum+=a[n]} END{print sum}' file.fasta
686400
  • /^>/{n=split($0,"_")},如果输入行以>开头,则创建一个数组a,其值基于在_字符上分割输入行。元素数量保存在n变量中。数组a将以>开头的每一行进行更新
  • /CACGGGTGGTAAGAGCAGC/{sum+=a[n]},如果输入行与所需的搜索匹配,则仅将a数组的最后一个元素添加到sum变量中(在数值上下文中默认初始值为0
  • END{print sum}在输入文件结束后打印结果

此外,有关生物信息特定的问答网站,请参见https://bioinformatics.stackexchange.com/questions

本文链接:https://www.f2er.com/3152768.html

大家都在问