2015-04-20 131 views
0

我有一大堆的路徑的文件,看起來像這樣:排序並打印在bash文件UNIX

7 /usr/file1564 
7 /usr/file2212 
6 /usr/file3542 

我試圖用sort拉出並與打印路徑(S)大多數情況下。這是我到目前爲止有:

cat temp| sort | uniq -c | sort -rk1 > temp 

我不確定如何只打印最高的發生。我也想打印像這樣我的輸出:

7 1564 
7 2212 

7是事件和其他數字在名稱的結尾是文件編號的總數。我對bash腳本編程頗爲陌生,所以任何幫助都將不勝感激!

+1

您是否至少有兩個其他問題已經涉及此問題? –

+0

...您對「最高出現次數」的標準是什麼? – ptierno

+0

這是我關於這個特定問題的第二個問題,但我決定刪除它並製作一個新的問題,因爲它措辭不佳,沒有答案。 – Will

回答

2

爲了只輸出第一行輸出(具有最高數字,因爲您之前正在進行反向數字排序),請通過head -n1

要刪除所有不是數字或空白的內容,請通過tr -cd '0-9[:space:]'管道。


爲了過濾只有編號最高值,允許有更比一個:

{ 
    read firstnum name && printf '%s\t%s\n' "$firstnum" "$name" 
    while read -r num name; do 
    [[ $num = $firstnum ]] || break 
    printf '%s\t%s\n' "$num" "$name" 
    done 
} < temp 
+0

可能有不止一個最高的數字。我該怎麼處理? – Will

+0

多數民衆贊成在那裏我問你有關的標準。 – ptierno

+1

在這種情況下,你要麼使用awk,要麼使用具有邏輯的「while read」循環。 –

1

如果你想避免排序,並允許您用awk,那麼你就可以這樣做:

awk '{ 
if($1>maxcnt) {s=$1" "substr($2,10,4); maxcnt=$1} else 
if($1==maxcnt) {s=s "\n"$1" "substr($2,10,4)}} END{print s}' \ 
temp