grep找到一个字符串后计算行数

时间:2013-08-14 10:10:21

标签: bash shell awk grep

我想在每个'标题'之后计算'text'的实例。我正在使用grep和awk但是对任何工具都开放。我的文件看起来像这样:

header1
text1
text2
text3
header2
text1
header3
header4
text1
text2
...

一个好的输出看起来像这样

header1 3
header2 2
header3 0
header4 2
...

我的问题类似于this,但不需要计算总出现次数,而是计算某个字符串之间的出现次数。

2 个答案:

答案 0 :(得分:4)

此awk命令不会将整个文件存储在内存中:

awk '/^header/{if (head) print head,k;head=$1; k=0}!/^header/{k++}END{print head,k}' file

如果您只想计算包含text的行,请将脚本更改为:

awk '/^header/{if (head) print head,k;head=$1; k=0}/text/{k++}END{print head,k}' file

答案 1 :(得分:2)

使用awk

$  awk '{if (/header/) {h=$0; a[h]=0} if (/text/) {a[h]++}} END{for (i in a) {print i" "a[i]}}' file
header1 3
header2 1
header3 0
header4 2
  • {if (/header/) {h=$0; a[h]=0} if (/text/) {a[h]++}}使用每个“标题”行后每个“文本”行的匹配数填充数组a[]
  • END{for (i in a) {print i" "a[i]}}在读取文件后打印结果。