我正在开发一个简单的猜数字游戏(以提高我的 bash 技能),该游戏最后将分数和名称附加到文件中,然后将其显示给玩家,如下所示:
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
最佳答案
您也可以尝试使用 awk
:
awk '{if($1 < a[$2] || !a[$2]) a[$2]=$1} END{for(i in a) print a[i], i}' file
这将使用第一列中第二列每个名称的最小值填充数组a
。该数组显示在末尾。
请注意,输出未排序。如果要排序,请添加 | sort -k2
到命令。
关于Bash 游戏得分文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39034997/