如何计算表中唯一值的唯一值

时间:2013-05-07 10:19:27

标签: bash awk sed uniq

还是初学者。

如何使用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 ...任何帮助非常感谢:)

3 个答案:

答案 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}'