计算单词在awk中以两列数组显示的次数

时间:2014-02-28 06:04:30

标签: awk multiple-columns

如何计算一个单词在awk中的两列数组中出现的次数? (同一个单词可以显示在任一列上,但我需要两个都添加一个到计数)。然后,我需要打印每个单词的次数。 例如,部分内容可能是:

Sarah Jenny
Carlos Javi
Jenny Mark
Calab Charles
Charles Jenny

我需要打印

Sarah 1
Jenny 3
Carlos 1
Javi 1
Mark 1
Charles 2

3 个答案:

答案 0 :(得分:2)

您可以创建数组并存储名称和索引。稍后迭代数组并打印我们的名字和计数。类似的东西:

awk '{for(x=1;x<=NF;x++)count[$x]++}END{for(name in count) print name,count[name]}' file

$ cat file
Sarah Jenny
Carlos Javi
Jenny Mark
Calab Charles
Charles Jenny

<~/Temp>$ awk '{for(x=1;x<=NF;x++)count[$x]++}END{for(name in count) print name,count[name]}' file
Javi 1
Mark 1
Carlos 1
Calab 1
Charles 2
Sarah 1
Jenny 3

答案 1 :(得分:1)

gnu awk版本

awk -v RS=" |\n" '{a[$1]++} END { for (i in a) print i,a[i]}' file
Calab 1
Charles 2
Mark 1
Jenny 3
Sarah 1
Javi 1
Carlos 1

如果您喜欢排序,可以添加| sort -nrk 2

这个解决方案打破了所有行,所以每一个词都出现在新行上 这使得计数变得更加简单。

如果不确定其空格或标签,请更改为RS="[[:space:]]+|\n"
和jaypal写的一样,要忽略大小写,请使用a[tolower($1)]++

由于RS中有多个字符,您需要gnu awk


全部包括

awk -v RS="[[:space:]]+|\n" '{a[tolower($1)]++} END { for (i in a) print i,a[i]}' file | sort -nrk 2
jenny 3
charles 2
sarah 1
mark 1
javi 1
carlos 1
calab 1

答案 2 :(得分:0)

如果输入文件只包含您想要使用的那两列。那么这应该足以完成工作

chidori@ubuntu:~$ cat input.txt
Sarah Jenny
Carlos Javi
Jenny Mark
Calab Charles
Charles Jenny

chidori@ubuntu:~$ tr -s ' ' '\n' < input.txt | sort | uniq -c
      1 Calab
      1 Carlos
      2 Charles
      1 Javi
      3 Jenny
      1 Mark
      1 Sarah
chidori@ubuntu:~$