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
運作結果如下:
這裡隻顯示了前面幾個單詞的出現數量。
再測試一個文本speech.txt,裡面的内容是羅斯福總統二戰期間對日本宣戰的演講,具體網址為:
http://www.historyplace.com/speeches/fdr-infamy.htm.運作指令
./wordcount.sh speech.txt
本次程式編寫主要參考《Linux腳本攻略》。
本次分享到此結束,歡迎大家交流~~