Bash 游戏得分文件

标签 bash sed

我正在开发一个简单的猜数字游戏(以提高我的 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/

相关文章:

正则表达式与 sed 使用引号

linux - 使用linux sed用特殊字符替换字符串

linux - 遍历用户输入

bash - 如何在 ssh session 中执行 scp 命令?

linux - Bash:组合多个命令的输出

linux - ". ./filename "命令是如何工作的

bash - 使用 Bash 将 .gitmodules 转换为可解析的迭代格式

awk - 如何删除单词和特定标记之间的空格?

python - 通过搜索unix中的所有目录来编译值列表

javascript - 如何替换最后出现的逗号