我有几个包含很多字段的CSV文件,但我只需要保留其中一些,所以我想在导入之前删除额外的数据。
我想跑步:
perl -i.bak -F, -ane 'BEGIN {$,=","} print @F[3..6], @F[9..12]' file.csv
虽然引用了文本字段,但某些字段包含逗号,而这个简单的解决方案不起作用。
答案 0 :(得分:2)
使用Text::CSV
。它处理包含分隔符的字段,以及许多其他不错的功能。
use strict;
use warnings;
use File::Copy;
use Text::CSV;
my $csv = Text::CSV->new({
binary => 1,
auto_diag => 1,
eol => $/,
always_quote => 1
}) or die 'Cannot use CSV: ' . Text::CSV->error_diag();
my $file = 'input.csv';
my $backup = "$file.bak";
copy $file, $backup or die "Copy failed: $!";
open my $in_fh, '<', $backup or die "$backup: $!";
open my $out_fh, '>', $file or die "$file: $!";
while (my $row = $csv->getline($in_fh)) {
my @wanted = @$row[3..6,9..12];
$csv->print($out_fh, \@wanted);
}
close $in_fh;
close $out_fh;