2014-03-02 87 views
0

由於某些原因,uniq在比較不同行時認識換行符,並且認識到換行符不同於\ n(或者至少對我來說是這樣)。bash uniq考慮換行符

我希望它做的就是採取這樣的文件:

hello world hello hello 
meh 
hello 
hello 

,並得到這樣的輸出:

5 hello 
1 world 
1 meh 

但我的代碼:

x=`sed 's/ /\n/g' $1 | uniq -c | sed 's/  //g'` 
echo "$x" 

正在輸出這:

1 hello 
1 world 
2 hello 
1 meh 
2 hello 
+0

「出於某種原因」?爲什麼這是一個驚喜?從手冊頁:'uniq - 報告或省略重複行「 –

回答

2

uniq需要排序輸入。

$ sed 's/ /\n/g' f | sort | uniq -c | sed 's/  //g' 
5 hello 
1 meh 
1 world