如何使用awk或其他控制台工具计算模式之间的行数?

时间:2015-11-18 13:52:30

标签: bash perl shell awk

我有这样的意见:

*** dev1
result1
result2
other3
*** dev2
result1
result2

我想在***之后计算行数并将它们显示为:

*** dev1
3
*** dev2
2

这是否可以使用awk或其他bash工具?

3 个答案:

答案 0 :(得分:3)

使用Perl:

$ perl -lne '/\*\*\*/ && do {print $c if defined $c; $c = 0; print} || $c++; END {print $c}' file
*** dev1
3
*** dev2
2

答案 1 :(得分:2)

例如:

awk '/\*\*\*/ {if (count) print count; print; count=0; next} {count++} END {print count}' file

对于您的样本输入,它返回:

*** dev1
3
*** dev2
2

为了匹配连续的块(即一行接一个***两行),我们可以检查NR(行数)而不是count

awk '/\*\*\*/ {if (NR>1)print count; print; count=0; next} {count++} END {print count}' file

答案 2 :(得分:2)

textNodes = document.evaluate("//text()", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); var searchRE = new RegExp('user.openProfileOrUnlockUser(item._type)','g'); var replace = 'user.openProfile'; for (var i=0;i<textNodes.snapshotLength;i++) { var node = textNodes.snapshotItem(i); node.data = node.data.replace(searchRE, replace); } 的另一种解决方案:

awk

每当模式awk '/\*\*\* /{p=$0} {a[p]++} END{for(i in a) print i"\n"a[i]-1}' File 匹配时,将整行分配给变量***。每行增加p(这将是计数器)。在a[p]中,使用数组END来打印模式和计数。 (a[]使用,因为即使对于-1的行,计数也会增加。输出可能并不总是排序,我认为这不是一个问题。

输出:

***