我需要在将行数除以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.
答案 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}'