还是初学者。
如何使用bash awk sed等计算表中唯一一组其他值的唯一值? 所以在两个(或更多)列表中,例如:
AA a
AA b
AA c
AA a
AB b
AA a
AB c
AA a
AC b
AC b
XX z
我如何得到
的输出AA 3
AB 2
AC 1
XX 1
其中输出的第二列是所有可能的第一列值的唯一值的计数;
因此,有6个AA,但只有3个独特的AA值等。
我不想使用SQL。只是bash命令行程序,如awk ...任何帮助非常感谢:)
答案 0 :(得分:3)
这样可以解决问题:
$ awk '!a[$0]++{u[$1]++}END{for (k in u) print k,u[k]}' file
AA 3
AB 2
AC 1
XX 1
要确保将排序的输出管道排序到sort -rnk2
,以便在第二个字段上进行反向数字排序:
$ awk '!a[$0]++{u[$1]++}END{for (k in u) print k,u[k]}' file | sort -rnk2
AA 3
AB 2
XX 1
AC 1
<强>解释强>
我们保留关联数组a
中所有唯一行的计数,如果之前没有看到当前行,则只更新辅助数组u
。
答案 1 :(得分:2)
我在考虑是否可以通过其他方式,这是一个非awk
解决方案:
sort file | uniq | cut -f1 -d' ' | uniq -c | rev
答案 2 :(得分:0)
sort -u file | uniq -cw2 | awk '{print $2,$1}'