圆形数值到最近的5的倍数

时间:2017-09-15 09:33:17

标签: bash unix integer rounding

我有一行百分比的文本文件。我需要将文本文件中的所有数字四舍五入到最接近的整数5,例如......

4向上舍入到58向上舍入到1012向下舍入到1017向下舍入到15等等......

文字档案:

25% 80% 22% 67% 45% 30%

预期的圆形输出:

25% 80% 20% 70% 45% 30%

尝试单个整数的代码:

m=23 | (( m /= 5, m *= 5 )) && echo $m

3 个答案:

答案 0 :(得分:2)

你可以使用这个awk:

s='25% 80% 22% 67% 45% 30%'
awk '{for (i=1; i<=NF; i++) $i = int( ($i+2) / 5) * 5 "%"} 1' <<< "$s"

25% 80% 20% 65% 45% 30%

答案 1 :(得分:1)

m / 5总是向下舍入。在分割之前,您需要将2添加到数字中,以便它将获得最接近的数字,而不是始终向下舍入。

m=23 ; (( m = (m+2)/5, m *= 5)); echo $m

答案 2 :(得分:1)

可以使用带e的perl sub来评估替换中的表达式。

perl -pe 's{(\d+)(?=%)}{int(($1+2)/5)*5}ge' file

25,85%,20%,65%,45%,30,20%,2,10%