我有一些数据文本文件,其行是带有错误的值,如下所示:
...
6 90.3785794742981 0.0952997386139722
40 1028.46336161948 4.41798447319325
...
第三列是相对于第二列的误差。我想编写一个脚本,以更易于阅读的格式打印它们,即打印具有正确数量有效数字的值并在括号之间的最后两个数字上打印错误,如下所示:
...
6 90.379(95)
40 1028.5(4.4)
...
使用正则表达式来提取数字将无法正常工作,因为处理点有困难,并且因为它会截断数字而不是近似它们,所以我认为我宁愿用 . 检索它们的大小printf
并用bc
.
我为此编写的代码如下
#! /bin/bash
while read a v verr
do
ov=`printf %e $v`
ov=${ov/*e/}
overr=`printf "%e" $verr`
overr=${overr/*e/}
dov=$((1-$overr))
v=`echo "scale=0;$v*10^($dov)" | bc -l`
v=`printf %.0f $v`
printf "$a %f(%.0f)\n" `echo "lenght=length($v);$v*10^($((-$dov)))" | bc -l` `echo "$verr*10^($dov)" | bc -l`
done < myfile.txt
我得到的是
6 90.379000(95)
40 1028.500000(44)
我的代码几乎可以工作,除了那些尾随零的出现。
我该如何摆脱它们?仅仅削减它们是不好的,因为它们的数字不是固定的,并且无论最后一个数字实际上是否为零,都将它们全部削减都会产生错误。