我面临命令跟踪的一个小问题,我试图找到平均值并获取它,但我需要不带小数点的输出。下面是尝试从具有很少 grep 条件的文件中读取的示例命令。
grep "#COMPLETE#" Requestlog1.log | grep "#O#" | awk -F"#" '{ sum += $NF; n++ } END { if (n > 0) print sum / n; }'
正在获得输出672.714
实际答案应四舍五入为673
答案1
您可以将您的替换print
为printf "%.0f\n"
.另请注意awk
can dogrep
的工作:
awk -F"#" '
/#COMPLETE#/ && /#O#/ {sum += $NF; n++}
END {if (n > 0) printf "%.0f\n", sum / n}'
它四舍五入到最接近的整数(x.3 到 x、x.7 到 x+1(负数为 x-1)、x.5 到 x 或 x+1(负数为 x-1),具体取决于 x 是否是偶数还是奇数)
答案2
中没有任何ceil
函数awk
,但您可以定义一个:
... | awk -F"#" 'function ceil(x){return (x == int(x)) ? x : int(x)+1} { sum += $NF; n++ } END { if (n > 0) print ceil(sum / n); }'
请注意,在其他语言中,int()
类似的轮次也是如此。floor
致谢:这里