我可以用 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)
标头将具有类似于我上面给出的示例的特定模式。项目也有特定的模式,如上例所示。我只对每个标题下的项目数感兴趣。
您可以使用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并打印键(标头),后跟值(计数)。减一以避免计算标头本身。
| 归档时间: |
|
| 查看次数: |
888 次 |
| 最近记录: |