Shell脚本中的成绩计算

时间:2018-10-01 07:50:57

标签: linux shell

我得到的文件名txtGrade.txt包含以下内容:

Name               Score
Nicki Minaj        60

我想通过shell脚本读取和计算文件中的每个人,并回答以下等级:

Name                Score         Grade
Nicki Minaj         60                C

条件为A>=80 , 79>=B>=70 ,69>=C>=60 , 59>=D>=50 , 49>=F

感谢您对我的帮助 欣赏。

2 个答案:

答案 0 :(得分:0)

您需要的命令:

  • tail -n +2将文件的第二行向前打印。
  • 通过case statement arithmetic expressions检查分数对应的等级。
  • 循环读取带有名称和分数的行:

    while read -r first_name last_name score
    do
        [here $first_name etc. can be used]
    done
    
  • 一个case statement来检查分数对应的等级。
  • printf '%s %s\n' 'some text' "$some_variable"打印“一些文本”,后跟一个空格,然后是$some_variable的值,然后是换行符。

您还需要一些有关quoting/word splitting的知识。

答案 1 :(得分:0)

您可以使用Sed命令来修改文件。 下面是用成绩修改文件的代码,我假设每一列都由两个选项卡分隔。

sed -i -e "1d" txtGrade.txt
file="ba.txt"

while IFS= read -r line
do
a=$(echo $line | awk '{print $2}')
if [ $a -ge "80" ]
then
    sed -i -e "s/${line}/${line}\\t\\tA/g" txtGrade.txt
elif [ $a -ge "70" ] && [ $a -le "79" ]
then
    sed -i -e "s/${line}/${line}\\t\\tB/g" txtGrade.txt
elif [ $a -ge "60" ] && [ $a -le "69" ]
then
    sed -i -e "s/${line}/${line}\\t\\tC/g" txtGrade.txt
elif [ $a -ge "50" ] && [ $a -le "59" ]
then
    sed -i -e "s/${line}/${line}\\t\\tD/g" txtGrade.txt
elif [ $a -ge "49" ]
then
    sed -i -e "s/${line}/${line}\\t\\tF/g" txtGrade.txt
else 
    echo "Results are not correct"
    exit 1
fi
done <"$file"
sed -i "1 i\Name\t\tScore\t\tGrade" txtGrade.txt

如果您喜欢我的回答,请投票, 谢谢