我有这样的意见:
*** dev1
result1
result2
other3
*** dev2
result1
result2
我想在***
之后计算行数并将它们显示为:
*** dev1
3
*** dev2
2
这是否可以使用awk或其他bash工具?
答案 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
的行,计数也会增加。输出可能并不总是排序,我认为这不是一个问题。
输出:
***