在Bash中将文件中的所有数字舍入到相等的长度?

时间:2010-04-24 09:49:48

标签: linux bash scripting

有没有简单的方法如何将文件中的浮点数舍入到相等的长度?该文件不仅包含其他文本数字。

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 个答案:

答案 0 :(得分:4)

#!/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 :(得分:0)

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更改为可以处理更强大的字边界集的内容。该解决方案具有保留边界的优点,而不仅仅是重新打印由空格分隔的输出。