Я бы не стал копаться в большом CSV-файле с регулярными выражениями, если бы не был очень уверен в своих данных и регулярном выражении. Использование модуля CSV кажется мне наиболее безопасным.
Этот скрипт будет принимать входные файлы в качестве аргументов и записывать исправленные файлы с расширением .new
.
Если вы заметили нежелательные изменения в вашем выходном файле, вы можете попытаться удалить комментарий в строке keep_meta_info
.
use strict;
use warnings;
use autodie;
use Text::CSV;
my $out_ext = ".new";
my $csv = Text::CSV->new( {
sep_char => ";",
# keep_meta_info => 1,
binary => 1,
eol => $/,
} ) or die "" . Text::CSV->error_diag();
for my $arg (@ARGV) {
open my $input, '<', $arg;
open my $output, '>', $arg . $out_ext;
while (my $row = $csv->getline($input)) {
for (@$row) {
s/([0-9\.]+)\-$/-$1/;
}
$csv->print($output, $row);
}
}