awk + ​​如何计算第一个字段中的单词

yae*_*ael -6 awk text-processing

我在rhel 7.2机器上有如下文件

more file.txt


car12
car55
car87
car12
car98
car55
car12
car12
car55
car65
car12
car65
Run Code Online (Sandbox Code Playgroud)

我们想将文件中的单词与数量相加作为以下预期结果

car12 - 5
car55 - 3
car87 - 1
car98 - 1
car65 - 2
Run Code Online (Sandbox Code Playgroud)

如何用awk将上述单词与其数量相加?

ter*_*don 5

你真的不需要 awk,你可以简单地做:

$ sort file | uniq -c
      5 car12
      3 car55
      2 car65
      1 car87
      1 car98
Run Code Online (Sandbox Code Playgroud)

但是,是的,在 awk 中也有可能:

$ awk '{a[$1]++}END{for(word in a){print word" - "a[word]}}' file 
car55 - 3
car65 - 2
car87 - 1
car12 - 5
car98 - 1
Run Code Online (Sandbox Code Playgroud)

使用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
Run Code Online (Sandbox Code Playgroud)