чем обработать файл стороковый

Makc500

есть файл, в котором встречаютс строки вида
#61=CARTESIAN_POINT('Control Point'585.375048106,89.7324997172,190.689941733 ;
нужно эти строки преобразовать (не трогая остальные) в
#61=CARTESIAN_POINT('Control Point'585.375,89.732,190.689 ;
т.е., округлить числа, и сохранить в другой файл
чем это проще сделать?

Elina74

Например, перл.
В нем же есть printf с форматами типа "%3.5f"

Makc500

перл не знаю
можешь написать пример скрипта, а я попробую догнать и поправить до нужного мне варианта ?

shlyumper

cat infile | awk -F, '{ printf $1 "%.3f,%.3f,%.3f ;\n", substr($2, 2 $3, $4 }' > outfile

Elina74

Вот пример не для файла.

#!c:/perl/bin/perl -w
use strict;
my($str);
$str = "#61=CARTESIAN_POINT('Control Point'585.375048106,89.7324997172,190.689941733 ;";
if($str =~ /\\d+\.\d+\d+\.\d+\d+\.\d+)\)/){
printf("%.3f\n", $1);
printf("%.3f\n", $2);
printf("%.3f\n", $3);
}

Makc500

клёво!
а как его доработать, чтобы он трогал только строчки с подстрокой CARTESIAN_POINT, а остальные не менял?

Makc500

благодарю, но боюсь, нужно будет ещё пол дня потратить на освоение перла )

shlyumper

awk -F, '/CARTESIAN_POINT/ { printf $1 "%.3f,%.3f,%.3f ;\n", substr($2, 2 $3, $4 } !/CARTESIAN_POINT/ { print $0 }'

Makc500

спасибо
Оставить комментарий
Имя или ник:
Комментарий: