bash 四舍五入到最接近的 4 的倍数
bash round to nearest multiple of 4
我需要在将行数除以 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.
我建议您使用 awk 解决整个问题:
awk 'END { print int((NR / 100) + 0.5) * 4 }' file.txt
这会将行数除以 25 * 4,然后使用 int
舍入结果,然后再乘以 4。
添加 0.5,以便将值四舍五入到最接近的值。要始终向下取整,您可以将其删除;要始终向上取整,您可以添加 1。
一个非常简单的处理方法是先除以 100,然后乘以 4,然后加上 50 舍入该数字。
expr '(' $line + 50 ')' / 100 '*' 4
四舍五入到最接近的 4 的倍数,将 6 和 10 都四舍五入为 8。
awk '{print sprintf("%.0f",[=10=]/4)*4}'
四舍五入到最接近的 4 的倍数,始终四舍五入 4 的模为 2 或 -2 的数字。
jq -R 'tonumber/4+.5|floor*4'
四舍五入到最接近的 4 的倍数,假设所有数字都是非负数,总是向上舍入 4 的模为 2 或 -2 的数字。对于大多数负数,这给出了错误的结果。
awk '{print int(([=12=]/4)+0.5)*4}'
四舍五入到 4 的倍数。
awk '{print[=13=]+(n-[=13=]%n)%n}' n=4
perl -MPOSIX -lpe'$_=ceil($_/4)*4'
四舍五入为 4 的倍数。
awk '{print[=14=]+(n-[=14=]%n)%n}' n=-4
perl -MPOSIX -lpe'$_=floor($_/4)*4'
jq -R 'tonumber/4|floor*4'
awk '{i=int([=14=]/4);print((i==[=14=]||[=14=]>0)?i:i-1)*4}'
将正数舍入为 4 的倍数,将负数舍入为 4 的倍数。
awk '{print int([=15=]/4)*4}'
我需要在将行数除以 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.
我建议您使用 awk 解决整个问题:
awk 'END { print int((NR / 100) + 0.5) * 4 }' file.txt
这会将行数除以 25 * 4,然后使用 int
舍入结果,然后再乘以 4。
0.5,以便将值四舍五入到最接近的值。要始终向下取整,您可以将其删除;要始终向上取整,您可以添加 1。
一个非常简单的处理方法是先除以 100,然后乘以 4,然后加上 50 舍入该数字。
expr '(' $line + 50 ')' / 100 '*' 4
四舍五入到最接近的 4 的倍数,将 6 和 10 都四舍五入为 8。
awk '{print sprintf("%.0f",[=10=]/4)*4}'
四舍五入到最接近的 4 的倍数,始终四舍五入 4 的模为 2 或 -2 的数字。
jq -R 'tonumber/4+.5|floor*4'
四舍五入到最接近的 4 的倍数,假设所有数字都是非负数,总是向上舍入 4 的模为 2 或 -2 的数字。对于大多数负数,这给出了错误的结果。
awk '{print int(([=12=]/4)+0.5)*4}'
四舍五入到 4 的倍数。
awk '{print[=13=]+(n-[=13=]%n)%n}' n=4
perl -MPOSIX -lpe'$_=ceil($_/4)*4'
四舍五入为 4 的倍数。
awk '{print[=14=]+(n-[=14=]%n)%n}' n=-4
perl -MPOSIX -lpe'$_=floor($_/4)*4'
jq -R 'tonumber/4|floor*4'
awk '{i=int([=14=]/4);print((i==[=14=]||[=14=]>0)?i:i-1)*4}'
将正数舍入为 4 的倍数,将负数舍入为 4 的倍数。
awk '{print int([=15=]/4)*4}'