2014-01-21 25 views
0

我使用3個命令(wget/sed /和tr/sort),它們都可以在命令行中使用,以生成最常用的單詞列表。我按順序使用命令,保存來自sed的輸出以在tr/sort命令中使用。現在我需要畢業後編寫一個結合這3個命令的腳本。因此,1)wget的下載文件,我投入2)sed -e 's/<[^>]*>//g' wget-file.txt,並且輸出>進入3)在一個腳本中連接Wget和Sed命令?

cat sed-output.txt | tr -cs A-Za-z\' '\n' | tr A-Z a-z | sort | uniq -c | 
sort -k1,1nr -k2 | sed ${1:-100}q > words-list.txt 

我知道如何使用正則表達式來刪除HTML標籤的問題/爭論的,但這3個命令目前正在爲我工​​作。所以謝謝你們一起幫忙。

+2

看起來好像您已經知道如何將輸出從一個命令輸出到另一個命令。目前還不清楚你在問什麼,你還沒有做。你可以'wget -O- http:// ... | sed ... | tr ...' – larsks

+0

感謝larsks,管道輸出它(幷包裝新行\爲了方便)。 – p1nesap

回答

0

這個命令應該做的工作:

wget -O- http://down.load/file | sed -e 's/<[^>]*>//g' | \ 
tr -cs A-Za-z\' '\n' | tr A-Z a-z | sort | uniq -c | \ 
sort -k1,1nr -k2 | sed ${1:-100}q > words-list.txt 
+0

對,這就是管道命令。 – p1nesap

2

用awk。

wget -O- http://down.load/file| awk '{ gsub(/<[^>]*>/,"")    # remove the content in label <> 
     $0=tolower($0)     # convert all to lowercase 
     gsub(/[^a-z]]*/," ")    # remove all non-letter chars and replaced by space 
     for (i=1;i<=NF;i++) a[$i]++  # save each word in array a, and sum it. 
    }END{for (i in a) print a[i],i|"sort -nr|head -100"}' # print the result, sort it, and get the top 100 records only 
+0

感謝awk的例子。你能否展示如何包含wget頁面/文件下載?提前致謝。 – p1nesap

+1

確定,更新。將wget輸出到awk命令:'wget命令| awk' – BMW

+0

我正在嘗試你的腳本,它給出了「無法寫入' - '(沒有錯誤)。」並且沒有輸出文件被創建。我在輸出文件之前嘗試了>,這會創建空文件。我也試過\行尾,它會拋出「\不是最後一個字符」的錯誤。 Sed腳本可以工作,但我想從你的awk解決方案中學習。那麼請您確認/檢查爲什麼這不起作用?此外,學習awk,^符號匹配字符串的開頭,但似乎在gsub(/ [^ a-z]] * /,「」)中,^除了不是字母之外的任何東西?爲什麼在開引號之前的逗號?沒有發現,在人awk。謝謝。 – p1nesap