bash舍入到最近的4

时间:2015-10-12 15:38:23

标签: bash rounding

我需要在将行数除以25之后得到最接近的4的倍数。

   line= wc -l < file.txt
   # 47322487 lines

   parts= $line/25
   # 1892899.48 after division

   round 1892899.48 this to nearest multiple of 4. 

3 个答案:

答案 0 :(得分:3)

我建议您使用awk解决整个问题:

awk 'END { print int((NR / 100) + 0.5) * 4 }' file.txt

这会将行数除以25 * 4,然后使用int对结果进行舍入,然后再乘以4。

添加

0.5,以便将值四舍五入到最接近的值。要始终向下舍入,您可以将其删除并始终向上舍入,您可以添加1。

答案 1 :(得分:1)

处理它的一个非常简单的方法是首先除以100,然后在加50后将其乘以4以对数字进行舍入。

expr '(' $line + 50 ')'  / 100 '*' 4

答案 2 :(得分:1)

舍入到最接近的4的倍数,将6和10四舍五入为8。

Nothing

舍入到最接近的4的倍数,始终舍入4的模数为2或-2的数字。

awk '{print sprintf("%.0f",$0/4)*4}'

舍入到最接近的4的倍数,总是将4的模数为2或-2的数字舍入,假设所有数字都是非负数。这给大多数负数带来了错误的结果。

jq -R 'tonumber/4+.5|floor*4'

四舍五入到4的倍数。

awk '{print int(($0/4)+0.5)*4}'

向下舍入到4的倍数。

awk '{print$0+(n-$0%n)%n}' n=4
perl -MPOSIX -lpe'$_=ceil($_/4)*4'

将正数舍入为4的倍数,将负数舍入为4的倍数。

awk '{print$0+(n-$0%n)%n}' n=-4
perl -MPOSIX -lpe'$_=floor($_/4)*4'
jq -R 'tonumber/4|floor*4'
awk '{i=int($0/4);print((i==$0||$0>0)?i:i-1)*4}'