
我有一些表格,其中的數字位數太多;如下:
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