重新格式化表 - 位数

重新格式化表 - 位数

我有一些表格,其中的数字位数太多;如下:

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

相关内容