如何解决Shell脚本中txt的平均学生成绩
我有一个文本文件,前两列中有名称,后四列中有4个随机等级。我必须计算出我在参数中给出的“学生”的平均值。
文本文件如下:
<Window.CommandBindings>
<CommandBinding
CanExecute="SaveCommand_CanExecute"
Command="ApplicationCommands.Save"
Executed="SaveCommand_Executed"/>
(...)
</Window.CommandBindings>
<StackPanel>
(...)
<Button
Name="Save"
Margin="3"
Padding="3"
Command="ApplicationCommands.Save"
Content="Save"
/>
(...)
因此,如果我有参数“ John Xander”,它应该还给我(2 + 2 + 4 + 4)/ 4 = 3
我有一部分可以从参数中读取文本和名称,但是我不能给名称打分。我试图将等级削减为4个不同的变量,然后使用这些变量进行计算。现在这段代码给我一个错误,因为avg部分是错误的,但是如果我尝试回显a,b,c,d,它给了我第三列,然后是3空行。
John Xander 2 2 4 4
... ... . . . .
编辑:感谢您的帮助,我只剩下1件事情了,如果参数中没有提供文件名,它将回显文件中的所有名字。
解决方法
请勿使用所有这些cut
命令来分隔行。您忘记在其中使用echo "$p"
。由于您没有通过管道传递任何东西给他们,因此第一个从stdin读取文件的其余部分,其余部分则无从读取。
只需将行的所有字段直接读入变量即可。
while read -r fname lname a b c d
do
x="$fname $lname"
if [ "$x" = "$1" ]
then
avg=$(( (a + b + c + d) / 4 ))
echo "$avg"
break
fi
done < class.txt
,
您可以使用awk相对轻松地实现这一目标:
awk -v nam="John Xander" 'match($0,nam) { print ($3+$4+$5+$6)/4 }' file
将变量nam传递给awk。使用nam,检查行中是否有匹配项。如果存在,则取第三,第四,第五和第六个空格分隔的字段,将它们相加,除以4并打印结果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。