我在 rhel 7.2 机器上有以下文件
more file.txt
car12
car55
car87
car12
car98
car55
car12
car12
car55
car65
car12
car65
我们想要将文件中的单词与数量相加,得到以下预期结果
car12 - 5
car55 - 3
car87 - 1
car98 - 1
car65 - 2
如何用 awk 将上述单词及其数量相加?
答案1
你实际上并不需要 awk,你可以简单地执行以下操作:
$ sort file | uniq -c
5 car12
3 car55
2 car65
1 car87
1 car98
但是,是的,在 awk 中也是可能的:
$ awk '{a[$1]++}END{for(word in a){print word" - "a[word]}}' file
car55 - 3
car65 - 2
car87 - 1
car12 - 5
car98 - 1
和GNU awk( gawk
),甚至可以使用一些预定义排序关于如何遍历数组,以及如何打印数组。如果您使用PROCINFO["sorted_in"]="@ind_str_asc"
,这将导致结果按照从最常见到最少的顺序打印:
$ awk '{a[$1]++}
END {
PROCINFO["sorted_in"]="@ind_str_asc";
for(word in a){print word" - "a[word]}
}' file
car12 - 5
car55 - 3
car65 - 2
car87 - 1
car98 - 1