Переформатировать таблицу - Количество цифр

Переформатировать таблицу - Количество цифр

У меня есть несколько таблиц, в которых числа содержат слишком много цифр, например:

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

Связанный контент