
数字の桁数が多すぎる表がいくつかあります。次のとおりです。
MONTH A1 A2 A3 ......
1 1.54564468 2.48949 6.4984984 .....
Unix を使用して、次のようにテーブルを再フォーマットする方法はありますか?
MONTH A1 A2 A3 ...
1 1.54 2.49 6.50 ...
答え1
「UNIXを使用する」とはどういう意味か分かりませんが、基本的なCスタイルの(s)printf
機能を提供するツールであれば、たとえば最も単純なものでも、それができるはずです。
$ perl -pe 's/\d+\.\d+/sprintf "%.2f", $&/ge'
MONTH A1 A2 A3 ......
1 1.54564468 2.48949 6.4984984 .....
MONTH A1 A2 A3 ......
1 1.55 2.49 6.50 .....
必要な正確なコマンドは、テーブル データの詳細によって異なります。たとえば、より一般的な浮動小数点数 (たとえば指数を含む可能性あり) を処理する必要があるかどうかなどです。
答え2
テーブルが実際にはタブ区切りの値のファイルであると仮定します。
awk -v OFS='\t' 'NR-1 { for(i=1; i<=NF; i++) $i = sprintf("%.2f", $i) } 1' <file.csv
編集:Perlでも同じです:
perl -lape '$.-1 and $_ = join "\t", map { sprintf "%.2f", $_ } @F' file.csv
答え3
まず始めに:
for line in "1 1.54564468 2.48949 6 .4984984"; do printf "%.2f " $line; done
1.00 1.55 2.49 6.00 0.50