查找文件中使用的单词的频率是一件很有意思的事情,下面,我们利用 关联数组,awk,sed,grep 等不同的方式来解决问题。

首先,我们需要一个测试用的文本,保存名为  word.txt

内容如下:

Word used
this  counting
this



接下来需要编写Shell脚本程序,如下所示:

#!/bin/bash
#Name: word_freq.sh
#Description: Find out frequency of words in a file

if [ $# -ne 1 ];
then
	echo "Usage: $0 filename";
	exit -1
fi

filename=$1

egrep -o "\b[[:alpha:]]+\b" $filename | \

awk '{ count[$0]++ } END{ printf("%-14s%s\n","Word","Count") ; \
 for(ind in count) { printf("%-14s%d\n",ind,count[ind]); } }'



工作原理介绍:

1.egrep -o "\b[[:alpha:]]+\b" $filename 用来只输出单词,用 -o 选项打印出由换行符分割的匹配字符序列,这样我们就可以在每行中列出一个单词

2.\b 是单词边界标记符。[:alpha:] 是表示字母的字符类

3.awk命令用来避免对每一个单词进行迭代


下面给出运行的截图:

统计特定文件中的词频_测试


关于awk命令请参考博主的其他博客。