我有一个文件,其内容是这样的
#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
}
答案 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