
ファイルには2つの数値列があり、最初の行は次のようになります。
0 0.0
列1の数字を列2の数字に追加し、結果を整数ではなく浮動小数点として維持したいと思います。したがって、合計が整数であっても、最初の行の結果は0.0でなければならず、他の行の結果は.0でなければなりません。
私はawkを試しました:
awk '{printf "%.1g\n", $0=$1+$2}' > sum.txt
小数点 "%.1g\n" の後に 1 桁を維持するように指示しましたが、まだ整数 0 が表示されます。
答え1
GNU awkマニュアルではこれを見ることはできませんが、例えばprintf()
関数のマニュアルページ%g
これはglibcで言及されています。
結果の小数部から末尾のゼロを削除します。小数点は、後に1つ以上の数字が続く場合にのみ表示されます。
#
また、次のことを意味する「代替形式」修飾子があります。
g 変換と G 変換の場合、末尾のゼロは結果から削除されません。
また、必要に応じてフォーマットが%g
自動的に変更されます1.23e+3
。 正確対応するフィールド(ドットの後の数字)は「最大数量」です。有効数gとG変換の場合」(いいえ小数点以下の桁数)、次のような結果が得られます。
printf "%#.1g\n", 0 0.
printf "%#.2g\n", 0 0.0
printf "%#.2g\n", 12 12.
printf "%#.2g\n", 1234 1.2e+03
したがって、小数点を強制的に表示することはできますが、次のゼロを強制的に表示することはできません。
別のオプションは、次のものを使用することです%f
。
printf "%.1f\n", 0 0.0
printf "%.1f\n", 1234 1234.0
または、必要に応じて点の後に欠けているゼロを追加します。
a = sprintf("%#.1g", 0); if (substr(a, length(a)) == ".") a = a "0";
答え2
次のコマンドを試してください
echo "0 0.0"| awk '{sum=$1+$2;printf "%.1f",sum}'
出力
echo "0 0.0"| awk '{sum=$1+$2;printf "%.2f",sum}'
output
0.0