Bash - 计算一个模式并打印包含该模式的行

时间:2015-11-16 05:38:27

标签: regex bash pattern-matching

大家好!当我在阅读这个讨论时,我想知道是否可以在计数值旁边添加包含模式的行。

不知怎的,我无法在讨论中添加任何评论,因此我发布了一个新问题。有人可以点燃我吗?

这里肯定存在一些误解,所以我举了一个例子。 让我们说,我有一个如下所示的DNA序列,想知道有多少' CG'存在于每一行中。

ACAAAGAACTCAAGAAGTTGGACCCCAGAGAACCAAATAACCCTATTAAA
AATTCGGAACAGAGATAAACAAAGAATTCTCAACTGAGGAAACTTGAATG
GGATTTTTTTTTAAGATTCACTTATTTTTATTTTCTGCATGAGTGTTTGC
CTCGATGTATGTACATATACGACATGTGTACGTGGTGCGCAAGTAAGCAG

此外,我想打印每一行(而不是模式)以及模式计数。

0 ACAAAGAACTCAAGAAGTTGGACCCCAGAGAACCAAATAACCCTATTAAA
1 AATTCGGAACAGAGATAAACAAAGAATTCTCAACTGAGGAAACTTGAATG
0 GGATTTTTTTTTAAGATTCACTTATTTTTATTTTCTGCATGAGTGTTTGC
4 CTCGATGTATGTACATATACGACATGTGTACGTGGTGCGCAAGTAAGCAG

我希望上面的例子有助于更好地理解这个问题。

谢谢!

3 个答案:

答案 0 :(得分:1)

你可以这样做:

printf 'pattern' | tee >(sed 's/$/ : /') | grep -cf - input.txt

获取tee的帮助并处理替换。

示例:

% cat file.txt 
foobar
spamegg
foo

% printf 'foo' | tee >(sed 's/$/ : /') | grep -cf - file.txt 
foo : 2

答案 1 :(得分:1)

cat fileName | grep pattern | uniq -c

答案 2 :(得分:0)

我刚刚使用EXCEL找到了一个非常简单而优雅的解决方案。 公式如下......

PRIORITY_LOW_POWER

这个公式基本上做的是计算单元格中字符串的总长度和删除模式后的长度(" CG"在这种情况下),然后减去它们。因为每个" CG"替换为空格后,替换后会丢失2个字符串,您可以通过将模式的长度除以模式的长度来获得模式的数量,在这种情况下为2。

例如,以下序列包含50个字符串和13个CG&#39。

HIGH_ACCURACY

取代" CG"对于空白,你得到24个字符串。

=(LEN(B2)-LEN(SUBSTITUTE(B2,"CG","")))/2

计算" CG"出现,

CAGTGCACACAACACATGTACGCGCGCGCGCGCGCGCGCGCGCGCGTGTG  50

如果您正在寻找" CAG",请输入" CAG"而不是" CG"除以3。 这有多简单!

您可以在以下链接中查看原始帖子。

http://fiveminutelessons.com/learn-microsoft-excel/count-occurrences-single-character-cell-excel#sthash.H4VfOkGB.dpbs

英语不是我的主要语言,所以请理解我写作中的错误。

人是天才!