넌 perl 및 Text::CSV_XS
모듈을 시도 할 수
#!/usr/bin/env perl
use warnings;
use strict;
use Text::CSV_XS;
my (@columns);
open my $fh, '<', shift or die;
my $csv = Text::CSV_XS->new or die;
while (my $row = $csv->getline($fh)) {
undef @columns;
if (@$row <= 12) {
@columns = @$row;
next;
}
my $extra_columns = (@$row - 12)/2;
my $post_columns_index = 4 + 2 * $extra_columns * 2;
@columns = (
@$row[0..3],
(join('', @$row[4..(4+$extra_columns)])) x 2,
@$row[$post_columns_index..$#$row]
);
}
continue {
$csv->print(\*STDOUT, \@columns);
printf "\n";
}
첫 번째는 추가 쉼표를 갖는 세 개의 라인, 입력 파일 (infile
)을 가정은 두 번째 추가 두 갖는다 쉼표 세번째는 올바른 :
,369 :
2011,123456,1234567,12345678,Hey There,How are you,Hey There,How are you,882864309037,ABC ABCD,LABACD,1.00000000,80.2500000,One Two
2011,123456,1234567,12345678,Hey There,How are you,now,Hey There,How are you,now,882864309037,ABC ABCD,LABACD,1.00000000,80.2500000,One Two
2011,123456,1234567,12345678,Hey There:How are you,Hey There:How are you,882864309037,ABC ABCD,LABACD,1.00000000,80.2500000,One Two
같이 스크립트를 실행
perl script.pl infile
수익률 그건 : 그것은 어떤 따옴표를 추가하지만 그것이 csv
사양에 올바른 기초를 쉽게
2011,123456,1234567,12345678,"Hey ThereHow are you","Hey ThereHow are you",882864309037,"ABC ABCD",LABACD,1.00000000,80.2500000,"One Two"
2011,123456,1234567,12345678,"Hey ThereHow are younow","Hey ThereHow are younow",LABACD,1.00000000,80.2500000,"One Two"
2011,123456,1234567,12345678,"Hey There:How are you","Hey There:How are you",882864309037,"ABC ABCD",LABACD,1.00000000,80.2500000,"One Two"
하는 것으로 이전 상태 것으로 처리합니다.
4 번째 및 7 번째 열에는 항상 숫자가 포함됩니까? –
가능하면 쉼표가있는 열에 캡슐화를 사용하여 csv 파일을 올바르게 다시 요청하거나 재생성하는 것이 가장 좋습니다. 예 : '2011,123456,1234567,12345678, "안녕하세요, 어떻게 지내세요?", "안녕하세요, 어떻게 지내세요?", 882864309037, ABC ABCD, LABACD, 1.00000000,80.2500000, One Two' – AeroX