Shell腳本編程是Linux系統最為核心的技術之一,它能夠利用簡單的命令來實現一些復雜的功能,同時,由於Linux提供了很多文本處理命令,如grep(grep family), tr, sed, awk等, 一旦熟練掌握這些命令,那么你在Linux系統中處理文本就會得心應手。
本文將展示如何利用Shell來實現WordCount功能。
首先先看wordcount.sh的代碼,用來實現WordCount功能。
#!/bin/bash
# filename: wordcount.sh
# usage: word count
# handle position arguments
if [ $# -ne 1 ]
then
echo "Usage: $0 filename"
exit -1
fi
# realize word count
printf "%-14s%s\n" "Word" "Count"
cat $1 | tr 'A-Z' 'a-z' | \
egrep -o "\b[[:alpha:]]+\b" | \
awk '{ count[$0]++ }
END{
for(ind in count)
{ printf("%-14s%d\n",ind,count[ind]); }
}' | sort -k2 -n -r
在上述代碼中,$1參數為你輸入的文本,利用cat命令讀取其內容,利用tr命令將所有的大寫字母轉換為小寫字母,再利用egrep命令抓取文本中的所有單詞,並逐項輸出,最后利用awk命令和關聯數組來實現word count功能,並按照出現的數量遞減輸出。
接着就是測試啦~~
首先是road.txt文件,里面是美國詩人 Robert Frost寫的詩歌 The Road Not Taken,參考網址為:https://www.poets.org/poetsorg/poem/road-not-taken .統計該文本的每個單詞出現的數量,可以運行命令
./wordcount.sh road.txt
運行結果如下: