awk 脚本提取两列平均值大于特定数字的行

awk 脚本提取两列平均值大于特定数字的行

我正在编写逻辑/命令,它将从给定的输入文件中读取内容并显示“两科成绩”平均值超过 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默认动作如果这样的条件为真。

相关内容