#! /bin/bash
#文件名:word_freg.sh
#用途:計算文件中單詞的詞頻
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])
}
}'
輸出如下:
[root@server script01]# bash word_freg.sh words.txt
word count
used 1
this 2
counting 1
說明:
egrep -o "\b[[:alpha:]]+\b" $filename | \ #用於輸出單詞,-o選項打印出自由換行符分割的匹配字符序列。
\b:單詞邊界標記符
[:alpha:]:表示字母的字符類。
awk命令用來避免對每一個單詞進行迭代。因為awk默認會逐行執行{}塊中的語句,就不需要編寫循環了。借助關聯數組,當執行count[$0]++時,單詞計數就增加。最后,在END{}語句塊中通過迭代所有的單詞,就能打印出單詞及他們各自出現的次數。