
次のように、数が多すぎるテーブルがあります。
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の使用」はどういう意味なのかわかりませんが、(s)printf
基本的なCスタイル機能を提供するほとんどすべてのツールは、最も簡単なツールのようにこれを行うことができるはずです。
$ 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