使用 bash shell 脚本计算文本文件中每个标题下的行数

pow*_*rox 1 bash shell

我可以用 python 或其他高级语言轻松地做到这一点。我感兴趣的是用 bash 来做这件事。

这是文件格式:

head-xyz
item1
item2
item3
head-abc
item8
item5
item6
item9
Run Code Online (Sandbox Code Playgroud)

我想做的是打印以下输出:

head-xyz: 3
head-abc: 4
Run Code Online (Sandbox Code Playgroud)

标头将具有类似于我上面给出的示例的特定模式。项目也有特定的模式,如上例所示。我只对每个标题下的项目数感兴趣。

hek*_*mgl 5

您可以使用awk:

awk '/head/{h=$0}{c[h]++}END{for(i in c)print i, c[i]-1}' input.file
Run Code Online (Sandbox Code Playgroud)

分解:

  • /head/{h=$0}

    对于每条匹配的行/head/,设置变量h来记录标题。

  • {c[h]++}

    对于文件中的每一行,更新 array c,该数组存储从标题字符串到行计数的映射。

  • END{for(i in c)print i, c[i]-1}

    最后,循环遍历数组中的键c并打印键(标头),后跟值(计数)。减一以避免计算标头本身。