如何计算一个单词在awk中的两列数组中出现的次数? (同一个单词可以显示在任一列上,但我需要两个都添加一个到计数)。然后,我需要打印每个单词的次数。 例如,部分内容可能是:
Sarah Jenny
Carlos Javi
Jenny Mark
Calab Charles
Charles Jenny
我需要打印
Sarah 1
Jenny 3
Carlos 1
Javi 1
Mark 1
Charles 2
答案 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:~$