2010-04-24 54 views

回答

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 
+0

你是否有机会史蒂夫伯恩:)你看起来像壳超级大师.. ++ btw :) – gameover 2010-04-24 16:17:36

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

相关问题