
У меня есть несколько таблиц, в которых числа содержат слишком много цифр, например:
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