2

这里还是初学者。

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

4

3 回答 3

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

于 2013-05-07T10:28:37.233 回答
2

我在想是否可以通过其他方式,这是一个非awk解决方案:

sort file | uniq | cut -f1 -d' ' | uniq -c | rev
于 2013-05-07T11:12:50.167 回答
0
 sort -u file | uniq -cw2 | awk '{print $2,$1}'
于 2013-05-07T11:55:42.397 回答