1

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

#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
}
4

2 回答 2

4

如果您熟悉printf()C 中的函数,则有一个类似的内置 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
于 2013-01-18T18:21:56.297 回答
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
于 2013-01-18T19:57:34.987 回答