unix - 使用 shell/bash 比较文件中的字符串并按结果分组
问题描述
我有一个如下文件:
h1 a 1
h2 a 1
h1 b 2
h2 b 2
h1 c 3
h2 c 3
h1 c1 3
h2 c1 3
h1 c2 3
h2 c2 3
我需要像这样的输出:
2 a 1
2 b 2
6 c 3
我已经尝试过 bash ,不知何故它没有给我预期的结果。
cat sample.log | awk '{print $2 , $3}' | sort | uniq -c
2
2 a 1
2 b 2
2 c 3
2 c1 3
2 c2 3
通过下面我可以获得 c* 结果,但是缺少 a 和 b 。
cat sample.log | awk '$2="c" {print $2 , $3}' | sort -n | uniq -c | sort -n | tail -1
6 c 3
解决方案
你可以使用这个gnu-awk
:
awk '{ ch=substr($2, 1, 1); ++freq[ch OFS $3] } END {
PROCINFO["sorted_in"] = "@ind_str_asc"; for (i in freq) print freq[i], i }' file
2 a 1
2 b 2
6 c 3
推荐阅读
- python - 如何从源代码构建 MultiNEAT?
- java - FIX 市场数据、QuickFIX 还是其他?
- java - spring boot如何改变默认的classloader使用setContextClassLoader?
- blazor - 如何获取服务器端 Blazor 应用程序的基本 URL
- android - 关于Android can't load json file in Application.persistentDataPath
- r - 使用 R 中的 pROC 使用单个阈值和 0.5 的阈值梯度改变灵敏度和特异性
- protocol-buffers - protobuf 消息中的最大字段数
- c# - c# 签署 XML 文档:x509 证书中有什么
- python - 熊猫如何创建随机虚拟数据
- flutter - 在 Dart/Flutter 中打印(错误)时尝试 {} catch(error) {} 错误