一个只有空格和单词组成的文本文件,使用shell脚本统计其中每个单词出现的次数。例如,文本文件:
the a is aaa the
i like a aa
you then like i a aa
统计每个单词个数:
the 2
a 3
is 1
aaa 1
i 2
like 2
aa 2
you 1
then 1
一、输出文件,将所有的空格转换成换行符,然后排序内容再统计单词出现的次数
more test.txt | tr ' ' '\n' | awk '{print $1}' | sort | uniq -c
可以达到效果,如果需要不区分大小写,可以针对大小写也进行替换,然后统计
more test.txt | tr ' ' '\n' | tr [a-z] [A-Z] | awk '{print $1}' | sort | uniq -c
但是这串脚本还有美中不足的地方,会统计换行的个数,再修改
more test.txt | tr ' ' '\n' | tr [a-z] [A-Z] | awk '{if($1!='\n')print $1}' | sort | uniq -c
二、全部使用awk处理,在awk中模拟使用map
awk '{for(i=1;i<=NF;i++){count[$i]+=1}}END{for(i in count){print i,count[i]}}' test.txt | sort
awk中,$0代表串内容,$1表示第一个,$NF是最后一个,NF所有拆分个数。