我正在编写逻辑/命令,它将从给定的输入文件中读取内容并显示“两科成绩”平均值超过 90 的学生的记录。
输入.txt 文件 -
Deepu#First#Meridian#95#90
Neethu#Second#Meridian#80#75
Sethu#First#DAV#75#70
Theekshana#Second#DAV#80#79
Teju#First#Sangamithra#88#63
Theekshitha#Second#Sangamithra#91#90
输出:
Deepu|First|Meridian|95|90|92.5
我写了以下命令 -
$ awk -F'#' ' { if(($4+$5)/2 >90) {print $1 "|" $2 "|" $3 "|" $4 "|" $5 "|" ($4+$5)/2 }} input.txt .
它显示错误:F# not found
。
答案1
您的命令中有一个拼写错误:
awk -F'#' ' { if(($4+$5)/2 >90) {print $1 "|" $2 "|" $3 "|" $4 "|" $5 "|" ($4+$5)/2 }} input.txt
您在代码末尾缺少单引号awk
。它应该看起来像
awk -F'#' ' { if(($4+$5)/2 >90) {print $1 "|" $2 "|" $3 "|" $4 "|" $5 "|" ($4+$5)/2 }}' input.txt
另外,人们可能会将awk
代码写为
awk -F '#' -v OFS='|' '($4+$5)/2 > 90 { $(NF+1) = ($4+$5)/2; print }' input.txt
这用于OFS
自动通过 分隔输出字段|
,并且也只是在输出之前将平均值作为新字段添加到当前记录的末尾(分配$(NF+1)
添加一个新字段;NF
是当前记录中的字段数,$NF
是最后一个字段)。这样,我们就不必提及我们想要输出的每个字段。
另一种awk
解决方案:
awk -F '#' -v OFS='|' '($(NF+1) = ($4+$5)/2) > 90' input.txt
这会将新的最后一个字段设置为第 4 个和第 5 个字段的平均值,并在该新字段大于 90 时打印记录。这避免了计算平均值两次,并且它依赖print
于默认动作如果这样的条件为真。