Linux 在shell脚本中逐行读取文件,并显示最低2个值
我已经创建了一个游戏,在这个游戏中,用户猜测程序随机创建的数字,在成功猜测后,程序会询问用户的姓名,并将用户名和分数存储在一个文件中。 现在我想打印3名得分最低的球员的姓名和得分Linux 在shell脚本中逐行读取文件,并显示最低2个值,linux,shell,Linux,Shell,我已经创建了一个游戏,在这个游戏中,用户猜测程序随机创建的数字,在成功猜测后,程序会询问用户的姓名,并将用户名和分数存储在一个文件中。 现在我想打印3名得分最低的球员的姓名和得分 range=129 randNum=`expr $RANDOM % $range` # generates a random number between 0 and 128 score=0 printf "Enter a number: " read num while [ $randNum -ne $
range=129
randNum=`expr $RANDOM % $range` # generates a random number between 0 and 128
score=0
printf "Enter a number: "
read num
while [ $randNum -ne $num ];
do
if [ $num -lt $randNum ]; then
printf "Low guess"
score=`expr $score + 1`
else
printf "High guess"
score=`expr $score + 1`
fi
printf "\nEnter a number: "
read num
done
read -p "Enter your name: " name
FILE="gameScores.txt"
echo "$name $score" >> $FILE
readFile=`cat $FILE`
# what should i do furthur to read from file sequentially and apply a condition for lowest scores
试一试
这将根据第二个字段中的分数对分数文件进行排序。然后你只需打印出前3个分数,这应该是你的最低分数
range=129
randNum=`expr $RANDOM % $range` # generates a random number between 0 and 128
score=0
printf "Enter a number: "
read num
while [ $randNum -ne $num ];
do
if [ $num -lt $randNum ]; then
printf "Low guess"
score=`expr $score + 1`
else
printf "High guess"
score=`expr $score + 1`
fi
printf "\nEnter a number: "
read num
done
read -p "Enter your name: " name
FILE="gameScores.txt"
echo "$name $score" >> $FILE
readFile=`cat $FILE`
# what should i do furthur to read from file sequentially and apply a condition for lowest scores
希望这能有所帮助。将数字存储为数组索引可能是最简单的方法。然后您可以展开
“${!arrayName[@]}”
以将它们按顺序排列。。。如果出于某种原因,您真的只想在本机bash中执行此操作,而不是使用排序
。但是,如果您想在本机bash中执行操作,为什么要使用像expr
这样的外部工具(运行速度慢、成本高)?使用POSIX标准化的本机shell数学要高效得多,如score=$((score+1))
;这样就不需要fork()
关闭子shell,exec
在其中执行一个单独的程序,并通过FIFO读取该程序的输出……最好的方法可能是显而易见的方法,我在第一条评论中提到了这一点——只需使用sort
。您应该检查用户输入。当我输入numberx
时,while测试中断,我得到了一个不错的分数。如果您最后有readFile分配,请用我提供的内容替换它。如果你需要一行一行地做,你可以使用我提供的,通过一个while read循环来完成。我知道-k用于按键对文件进行排序。但是这些数字2,2n呢?只使用第二个字段作为键,并将其视为数字。第一个2代表第二个字段,2n代表数字?是这样吗?每个排序手册页,2,2是开始和停止字段,“n”是类型。因此,从字段2开始,在字段2结束,排序类型为数值。