天天看點

利用shell實作WordCount

  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腳本攻略》。

  本次分享到此結束,歡迎大家交流~~

繼續閱讀