首页 > 解决方案 > 使用 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

标签: unixawk

解决方案


你可以使用这个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

推荐阅读