如何提取文件中length后的首个数字并统计各唯一数值的出现次数
实现方案
直接用awk单遍扫描文件即可完成统计,2万多行的文件可以在毫秒级得到结果,命令如下:
awk 'match($0, /length: ([0-9]+)/, m) { cnt[m[1]]++ } END { for (n in cnt) printf "length %s: %d\n", n, cnt[n] }' file.txt
命令说明
- 用
match函数精准提取length:后紧随的首个数字,不受行内其他内容干扰 - 通过关联数组
cnt累计每个数字的出现次数 - 遍历数组按要求的格式输出结果
如果需要输出按数字大小升序排列,追加排序管道即可:
awk 'match($0, /length: ([0-9]+)/, m) { cnt[m[1]]++ } END { for (n in cnt) printf "length %s: %d\n", n, cnt[n] }' file.txt | sort -k 2n
针对你给出的示例数据,运行后输出和你期望的格式完全一致。
内容的提问来源于stack exchange,提问作者nobody-at-all
相关产品推荐
相关产品推荐

