【发布时间】:2020-06-12 23:12:29
【问题描述】:
编写unix命令,显示每科50分以上,平均分75分以上的所有学生的roll、name和avg。
avg 可以计算为 (subj_1+subj_2)/2。
输入:
roll ,name,subScore1,subScore2
123,a,88,78
101,b,76,90
812,c,78,98
输出:
123 a 83
812 c 78
我的代码:
awk 'BEGIN {FS=',';OFS=' '} {if(NR>1 (&& $3>50 && $4>50) && ($3+$4)/2 >= 75){print $1,$2,($3+$4)/2}}' input_file
我不知道为什么会出错。 请大家帮忙。
【问题讨论】:
-
NR>1 -eawk不是shell,它有自己的(不同的)语言。没有-e。-e是什么意思?它应该怎么做? -
是的,你可以用“&&”代替-e
-
@AkshaySingh,您不需要将
OFS设置为空格,因为它的默认值本身就是空格。从逻辑上讲,它看起来不错,但我还没有测试过,而且在我相信你已经知道的几个地方你也不需要&&。感谢您分享您的努力,继续努力,并确保您始终以代码形式在您的问题中添加您的努力,这在 SO,快乐学习方面受到强烈鼓励。 -
感谢先生,您一如既往的快速反馈,让我们保持动力......
-
您不能在任何 shell 中的单引号分隔的字符串(包括脚本)中使用单引号。而不是
awk 'BEGIN {FS=',';OFS=' '},在语法上你需要awk 'BEGIN {FS=",";OFS=" "}(当然OFS=" "实际上并没有做任何事情,因为这是默认设置)。 wrtif(NR>1 (&& $3>50...- 我不知道你会在哪里写cond1 (&& cond2)而不是cond1 && (cond2)就像你在脚本的其余部分中所做的那样。