2016-08-19 243 views
2

我工作的一個簡單的數字猜謎遊戲(提高我的bash技能),這在年底追加分數和名稱到一個文件,然後顯示給玩家,就像這樣:猛砸遊戲Scorefile

10 Hana 
10 lilka 
10 nogba 
12 nogba 
13 Hana 
13 ugaea 
1 Lilka 
5 lilka 
7 borja 
7 Hana 
8 frina 
8 molaa 
9 Hana 
9 lanma 
9 lilka 

在顯示高分檔案之前,我想刪除所有重複的行,但留下最低分的檔案。像這樣:

10 nogba 
13 ugaea 
1 Lilka 
5 lilka 
7 borja 
7 Hana 
8 frina 
8 molaa 
9 lanma 

我想sed可能是我的答案,但我不舒服。

也許這樣?

echo $highscorevalue >> $scorefile 
sed -i '$!N; /^\(.*\)\n\1$/!P; D' $scorefile 
cat $scorefile | sort 

回答

1

您可以awk嘗試,以及:

awk '{if($1 < a[$2] || !a[$2]) a[$2]=$1} END{for(i in a) print a[i], i}' file 

這將填補在第二列的每名第一列中的極小值值數組a。數組顯示在最後。

注意輸出沒有排序。如果要對其進行排序,請將| sort -k2添加到該命令中。

+0

非常感謝,完美的作品! –

1
$ sort -n -k2,2 -k1,1 score.txt | awk '!seen[$2]++' | sort 
10 nogba 
13 ugaea 
1 Lilka 
5 lilka 
7 borja 
7 Hana 
8 frina 
8 molaa 
9 lanma 
  • 第一sort命令排序由第二列,然後數值排序以升序當有一個名字的多個條目。基於在第二列名
  • awk命令丟棄重複,保持第一項只用於匹配輸出
  • sort命令,如題所給