#linux #bash #scripting
#linux #bash #сценарии
Вопрос:
Есть ли простой способ округлить плавающие числа в файле до равной длины? Файл содержит другой текст, а не только цифры.
before: bla bla bla 3.4689 bla bla bla 4.39223 bla.
after: bla bla bla 3.47 bla bla bla 4.39 bla.
Спасибо
Ответ №1:
Bash
#!/bin/bash
shopt -s extglob
while read -r line
do
set -- $line
for((i=1;i<=${#};i ))
do
s=$(eval echo ${${i}})
case "$s" in
([0-9]). ([0-9]) ) s=$(printf "%.2f " $s);;
esac
printf "%s " $s
done
echo
done <"file"
вывод
$ cat file
bla1 bla 2 bla 3.4689 bla bla bla 4.39223 bla.
words ..... 2.14 blah blah 4.5667 blah
$ ./shell.sh
bla1 bla 2 bla 3.47 bla bla bla 4.39 bla.
words ..... 2.14 blah blah 4.57 blah
Комментарии:
1. Вы случайно не Стив Борн 🙂 Ты выглядишь как супер-гуру оболочки .. кстати 🙂
Ответ №2:
awk BEGIN{RS="[[:space:]]"} /[0-9].[0-9]/{printf("%.2f%s",$1,RT)} !/[0-9].[0-9]/{printf("%s%s",$1,RT)} f.txt
Возможно, вы захотите изменить RS на что-то, что может обрабатывать более надежный набор границ слов. Преимущество этого решения заключается в сохранении границы, а не в простой повторной печати выходных данных, разделенных пробелами.