Ceil только числа с плавающей запятой в bash linux
В Linux Bash я хочу получить следующее целое число для данного числа, только если это число с плавающей запятой. Я пробовал с
count=$((${count%.*} + 1));
Но с помощью приведенного выше кода все время (даже если число не является плавающей точкой), оно дает следующее целое число.
Ожидаемый результат:
345.56 => 346
345.12 => 346
345 => 345
Может кто-нибудь помочь мне найти решение?
Заранее спасибо.
3 ответа
Решение
Вы можете использовать Perl
NUMBER=365
perl -w -e "use POSIX; print ceil($NUMBER/1.0), qq{\n}"
для присвоения переменной
MYVAR=$(perl -w -e "use POSIX; print ceil($NUMBER/1.0), qq{\n}")
Вам нужно будет проверить наличие точки:
case $count in
*.*) count=$(( ${count%.*} + 1 )) ;;
*) : nothing to do
;;
esac
или же
[[ $count == *.* ]] && count=$(( ${count%.*} + 1 ))
В awk. Некоторые тестовые записи:
$ cat file # dont worry about stuff after =>
345.56 => 346
345.12 => 346
345 => 345
345.0
0
-345.56 => 346
-345.12 => 346
-345 => 345
-345.0
Awk:
$ awk '{print $1 " => " int($1)+($1!=int($1)&&$1>0)}' file
345.56 => 346
345.12 => 346
345 => 345
345.0 => 345
0 => 0
-345.56 => -345
-345.12 => -345
-345 => -345
-345.0 => -345