Округлить все числа в файле до одинаковой длины в Bash? - PullRequest
1 голос
/ 24 апреля 2010

Есть ли простой способ, как округлить плавающие числа в файле до равной длины? Файл содержит другой текст, а не только цифры.

before: bla bla bla 3.4689 bla bla bla 4.39223 bla.
after:  bla bla bla 3.47 bla bla bla 4.39 bla.

Спасибо

Ответы [ 2 ]

4 голосов
/ 24 апреля 2010

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
0 голосов
/ 24 апреля 2010

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 на что-то, что может обрабатывать более надежный набор границ слов. Преимущество этого решения заключается в сохранении границы, а не просто в перепечатке вывода, разделенного пробелами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...