我有一行百分比的文本文件。我需要将文本文件中的所有数字四舍五入到最接近的整数5,例如......
4
向上舍入到5
,8
向上舍入到10
,12
向下舍入到10
,17
向下舍入到15
等等......
文字档案:
25% 80% 22% 67% 45% 30%
预期的圆形输出:
25% 80% 20% 70% 45% 30%
尝试单个整数的代码:
m=23 | (( m /= 5, m *= 5 )) && echo $m
答案 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%