如何使用shell脚本替换具有字符的行中的单词

时间:2013-01-18 18:18:11

标签: bash shell

我有一个文件,其内容是这样的

#Time value
2.5e-5 1.3
5e-5 2.7
7.5e-5 1.1
0.0001 5.9
0.000125 5.8
0.00015 3
......

如何替换其中带有字母e的行(科学记数法),以便最终文件为

#Time value
0.000025 1.3
0.00005 2.7
0.000075 1.1
0.0001 5.9
0.000125 5.8
0.00015 3
...... 

shell脚本能够执行此操作吗?

for (any word that is using scientific notation)
{
    replace this word with decimal notation
}

2 个答案:

答案 0 :(得分:4)

如果您熟悉C中的printf()函数,则会有类似的内置shell命令:

$ printf '%f' 2.5e-5
0.000025
$ printf '%f' 5e-5
0.000050

要在脚本中使用它,您可以执行以下操作:

while read line; do
    if [[ $line = \#* ]]; then
        echo "$line"
    else
        printf '%f ' $line
        echo
    fi
done < times.txt

跳过#Time value评论会遇到一些麻烦。如果你能摆脱那条线,那就更简单了:

while read a b; do printf '%f %f\n' $a $b; done < times.txt

答案 1 :(得分:1)

使用awk

$ awk '$1~/e/{printf "%f %s\n", $1,$2}$1~!/e/{print}' file
0.000025 1.3
0.000050 2.7
0.000075 1.1
0.0001 5.9
0.000125 5.8
0.00015 3