2013-03-17 44 views
1

我有這樣的腳本編寫打印在一個或多個文件的話的分佈:切換此輸出的格式?

cat "[email protected]" | tr -cs '[:alpha:]' '\n' | 
tr '[:upper:]' '[:lower:]' | sort | 
uniq -c | sort -n 

這給了我一個輸出,如:

1 the 
4 orange 
17 cat 

不過,我想改變它,這個詞首先列出(我假設的排序將介入所以它的字母),數量不限,像這樣:

cat 17 
orange 4 
the 1 

有隻是一個簡單的選擇我需要切換這個?或者是更復雜的東西?

回答

4

管道輸出到

awk '{print $2, $1}' 

,或者您可以使用AWK爲完整的任務:

{ 
    $0 = tolower($0) # remove case distinctions 
    # remove punctuation 
    gsub(/[^[:alnum:]_[:blank:]]/, "", $0) 
    for (i = 1; i <= NF; i++) 
     freq[$i]++ 
} 

END { 
    for (word in freq) 
     printf "%s\t%d\n", word, freq[word] 
} 

用法:

awk -f wordfreq.awk input 
+0

謝謝!我在$ 2和$ 1之間添加了一個「」來創建空間,然後將awk輸出轉換爲另一種類型以使其按字母順序排列,現在效果很好。 – zyxxwyz 2013-03-17 20:41:43

+0

+1,但需要對較大的awk程序的輸出進行排序:'awk -f wordfreq.awk input |排序' – 2013-03-17 22:15:16

+0

@glennjackman - 來自主人的讚美;你讓我今天很開心 :-) – 2013-03-17 22:28:33