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

grep字符串和上层子字符串的和值,grep,sum,find,substring,Grep,Sum,Find,Substring,我有一个file.fasta,如下所示: >NODE_1_length_4203_cov_583903 CCCCCAGTAATTGTGCTGCGCGGCGATGCTAACAAGTTAAAATGCTATCGCTGAGCTAAG AAAAAGCATGGAAGCTTGGTAAAGTACTACAGTACTACGTGAATGTACCATCAGATTGTG TTTGTTAGTCGCGCTTTTTTTTTTTTGGAATTTTTTGGAATTTTTTTTGCGCTAACAACC TCCTGCCGTTTT

我有一个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参数的所有值求和(出现在以“>”符号开头的每个事件的上行中)。

awk
在这里是一个不错的选择(下面的代码在
GNU awk
上测试)

  • /^>/{n=split($0,a,“”)}
    如果输入行以
    开头,则创建一个数组
    a
    ,该数组的值基于在
    字符上拆分输入行。元素数保存在
    n
    变量中。数组
    a
    将从
  • /CACGGGTGGTAAGAGCAGC/{sum+=a[n]}
    如果输入行与所需搜索匹配,则只需将
    a
    数组的最后一个元素添加到
    sum
    变量(在数值上下文中,默认初始值为
    0
  • END{print sum}
    在输入文件结束后打印结果
另外,请参见bioinfo特定问答网站

$ awk '/^>/{n=split($0,a,"_")} /CACGGGTGGTAAGAGCAGC/{sum+=a[n]} END{print sum}' file.fasta
686400