awk -F, '{if ($2 == 0) awk '{ total += $3; count++ } END { print total/count }' CLN_Tapes_LON; }' /tmp/CLN_Tapes_LON
awk: {if ($2 == 0) awk {
awk: ^ syntax error
bash: count++: command not found
最佳答案
只是为了好玩,让我们看看您的原始版本有什么问题,然后逐步将其转换为可用的版本。这是您的初始版本(我将其称为版本 0):
awk -F, '{if ($2 == 0) awk '{ total += $3; count++ } END { print total/count }' CLN_Tapes_LON; }' /tmp/CLN_Tapes_LON
-F,
将字段分隔符设置为逗号字符,但您后面的评论似乎表明列(字段)由空格分隔。所以让我们摆脱它; whitespace-separation 是 awk 默认期望的。版本 1:
awk '{if ($2 == 0) awk '{ total += $3; count++ } END { print total/count }' CLN_Tapes_LON; }' /tmp/CLN_Tapes_LON
您似乎试图在 awk 程序中嵌套对 awk 的调用?几乎从来没有任何要求这样做,无论如何这都不是这样做的方法。让我们同时去掉不匹配的引号:顺便注意,您不能以这种方式将单引号嵌套在另一对单引号中:您必须以某种方式转义它们。但这里根本不需要它们。版本 2:
awk '{if ($2 == 0) { total += $3; count++ } END { print total/count } }' /tmp/CLN_Tapes_LON
这很接近但不太正确:END
block 仅在所有输入行处理完毕后执行:将它放在 if中没有意义
。所以让我们把它移到大括号外面。我还要收紧一些空白。版本 3:
awk '{if ($2==0) {total+=$3; count++}} END{print total/count}' /tmp/CLN_Tapes_LON
第 3 版确实有效,您可以到此为止。但是 awk 有一个方便的方法来指定只针对符合条件的行运行代码块:'condition {code}'
所以你可以更简单地写成:
awk '$2==0 {total+=$3; count++} END{print total/count}' /tmp/CLN_Tapes_LON
...当然,这几乎正是 John1024 所建议的。
关于awk - 有人可以帮助我在其他列上使用 awk 获得列的平均值吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29911738/