次のように、行がエラーのある値であるデータ テキスト ファイルがいくつかあります。
...
6 90.3785794742981 0.0952997386139722
40 1028.46336161948 4.41798447319325
...
3 列目は 2 列目に対する相対誤差です。より人間が読める形式で出力するスクリプトを書きたいと思います。つまり、正しい有効桁数で値を出力し、括弧の間の最後の 2 桁にエラーを出力します。次のようにします。
...
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)
私のコードは、末尾のゼロの出現を除いて、ほとんど機能します。
どうすればそれらを取り除くことができますか? それらの数は固定されておらず、それらをすべて切り取ると、最後の桁が実際にゼロである場合にエラーが発生するため、それらを切り取るだけでは良くありません.