我试图在bash中创建一个上限函数,该函数需要一个数字并向上舍入为上限函数。
例如: 如果shard_div为3.2,则rounded_up为4。
rounded_up=`echo $shard_div | awk '{printf("%d\n",$0+=$0<0?0:0.9)}'`
出现问题的地方是一些shard_div变量是数字,例如0.5 ^ -10或0.00001。发生这种情况时,rounded_up为0。
我不希望使用if语句,并且正在运行的机器没有Perl。
答案 0 :(得分:0)
使用bc
。有点健壮,但是可以。
rounded_up=$(echo "scale=0; v=$shard_div; v=6; if (v%1 != 0) v = (v + 1); v / 1" | bc)
/ 1
是必需的,否则bc无法缩放。 v%1 == 0
情况需要处理,否则整数也会按比例放大(例如v=5; 5+1
-> 6)
答案 1 :(得分:0)
awk:
$ awk '{print int($1) + ( $1!=int($1) && $1>=0 )}'
一些测试:
$ echo 0 | awk '{print int($1)+($1!=int($1)&&$1>=0)}'
0
$ echo 0.1 | awk '{print int($1)+($1!=int($1)&&$1>=0)}'
1
$ echo 1 | awk '{print int($1)+($1!=int($1)&&$1>=0)}'
1
$ echo -1 | awk '{print int($1)+($1!=int($1)&&$1>=0)}'
-1
$ echo -1.1 | awk '{print int($1)+($1!=int($1)&&$1>=0)}'
-1