grep字符串和上层子字符串的和值
我有一个file.fasta,如下所示:grep字符串和上层子字符串的和值,grep,sum,find,substring,Grep,Sum,Find,Substring,我有一个file.fasta,如下所示: >NODE_1_length_4203_cov_583903 CCCCCAGTAATTGTGCTGCGCGGCGATGCTAACAAGTTAAAATGCTATCGCTGAGCTAAG AAAAAGCATGGAAGCTTGGTAAAGTACTACAGTACTACGTGAATGTACCATCAGATTGTG TTTGTTAGTCGCGCTTTTTTTTTTTTGGAATTTTTTGGAATTTTTTTTGCGCTAACAACC TCCTGCCGTTTT
>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}
$ awk '/^>/{n=split($0,a,"_")} /CACGGGTGGTAAGAGCAGC/{sum+=a[n]} END{print sum}' file.fasta
686400