需要从命令输出中删除小数点

需要从命令输出中删除小数点

我面临命令跟踪的一个小问题,我试图找到平均值并获取它,但我需要不带小数点的输出。下面是尝试从具有很少 grep 条件的文件中读取的示例命令。

grep "#COMPLETE#" Requestlog1.log | grep "#O#" | awk -F"#" '{ sum += $NF; n++ } END { if (n > 0) print sum / n; }'

正在获得输出672.714

实际答案应四舍五入为673

答案1

您可以将您的替换printprintf "%.0f\n".另请注意awkcan 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

致谢:这里

相关内容