bash - grep 找到字符串后计算行数

标签 bash shell awk grep

我想在每个“标题”之后计算“文本”的实例。我正在使用 grep 和 awk,但对任何工具都持开放态度。我的文件如下所示:

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

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

header1 3
header2 2
header3 0
header4 2
...

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

最佳答案

此 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

关于bash - grep 找到字符串后计算行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18228884/

相关文章:

bash - 如果一行的长度小于一个数字,则追加到它的前一行

bash - 过滤输入以删除某些字符/字符串

linux - 如何在 bash 作业列表中扩展变量

linux - 如何从文件列表中创建不存在的文件列表

unix - 为什么一些 GNU 并行输入包含引号?

linux - 优尼克系统 |使用 awk 从日志文件中提取特定值

linux - Ubuntu 中的 *.tiff 中的 f 给出带有扩展名的文件名

python - 使用 shell 和通过 subprocess.call 发送电子邮件时的不同结果

linux - 将一个命令的输出用于另一个

perl - 如何用 sed、awk 等的 shell 命令的输出替换子字符串?