Linux 在shell脚本中逐行读取文件,并显示最低2个值

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 $

我已经创建了一个游戏,在这个游戏中,用户猜测程序随机创建的数字,在成功猜测后,程序会询问用户的姓名,并将用户名和分数存储在一个文件中。 现在我想打印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
试一试

这将根据第二个字段中的分数对分数文件进行排序。然后你只需打印出前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
。您应该检查用户输入。当我输入number
x
时,while测试中断,我得到了一个不错的分数。如果您最后有readFile分配,请用我提供的内容替换它。如果你需要一行一行地做,你可以使用我提供的,通过一个while read循环来完成。我知道-k用于按键对文件进行排序。但是这些数字2,2n呢?只使用第二个字段作为键,并将其视为数字。第一个2代表第二个字段,2n代表数字?是这样吗?每个排序手册页,2,2是开始和停止字段,“n”是类型。因此,从字段2开始,在字段2结束,排序类型为数值。