2017-08-26 71 views
1

例如列表相同的字和它們的出現號碼的文本文件

我有一個包含一個文本文件animal.txt

bird 
bird 
dog 
rabbit 
dog 
cat 
rabbit 
dog 
bird 
cat 
bird 
bird 
enter code here 

我想有一些腳本,可以給我這樣的結果:

$ ./program.sh animals.txt 
bird 5 
cat 2 
dog 3 
rabbit 2 

注意:結果不需要採用這種格式。

我認爲編寫一些簡單的程序來讀取數組中的單詞並不困難,然後手動計算它們的出現次數,但我在這裏要求您針對此問題採取更「快速和骯髒」的方法。


謝謝所有答覆者。對我來說,最好的解決方案是在這裏:

cat animals.txt | sort | uniq -c – 
@cnicutar

+5

'cat animals.txt |排序| uniq -c' – cnicutar

+0

這正是我想要的。 – fronthem

+0

@cnicutar如果你能爲它創建一個答案會很好 –

回答

2

簡單uniq的 + 排序 + AWK管道:

uniq -c <(sort animal.txt) | awk '{print $2,$1}' 

輸出:

bird 5 
cat 2 
dog 3 
rabbit 2 

我也建議你另一個叫做GNU datamash偉大的工具:

datamash -s -g1 count 1 <animal.txt 

輸出(分離選項卡\t):下面太AWK

bird 5 
cat 2 
dog 3 
rabbit 2 
1

嘗試。

解決方案1st:如果您需要的輸出與Input_file的順序相同,則以下內容可能會有所幫助。

awk '!a[$1]{b[++i]=$1} {a[$1]++} END{for(j=1;j<=i;j++){print b[j],a[b[j]]}}' Input_file 

解決第二:如果你不打擾他們的輸出順序則以下可以幫助你。

awk '{a[$1]++} END{for(i in a){print i,a[i]}}' Input_file 
相關問題