CSV에서 특정 열을 삭제해야 합니다.

CSV에서 특정 열을 삭제해야 합니다.

입력 예:

A0021,,Outside state ambulance serv,I,,0,0,,
A4217,,"Sterile water/saline, 500 ml",X,,
A4672,,"Drainage ext line, dialysis",X,,

첫 번째 sed 명령 이후의 출력 예

sed -i 's/("[^,])[,]([^"]")/\1\2/g' 파일.csv:

A0021,,Outside state ambulance serv,I,,0,0,,
A4217,,"Sterile water/saline, 500 ml",X,,
A4672,,"Drainage ext line dialysis",X,,

마지막 명령 이후 원하는 출력:

A0021,,,I,,0,0,,
A4217,,,X,,
A4672,,,X,,

세 번째 열은 내 프로젝트에서 문제를 일으켰고 가장 쉬운 해결책은 필요하지 않으므로 간단히 삭제하는 것입니다. 쉼표는 그대로 유지되어야 하며 빈 내용만 있어야 합니다.

sed세 번째 열을 삭제하는 명령 앞에 따옴표에 포함된 쉼표를 제거하는 명령을 개발해야 할 것 같습니다 . 가장 쉬운 방법은 쉼표의 개수를 세어 두 번째와 세 번째 쉼표 사이를 모두 삭제하는 것이라고 생각합니다.

이것은 세 번째 열의 내용을 지우기 전에 따옴표 안의 쉼표를 제거하는 데 사용하는 sed 명령입니다.

답변1

다음과 같은 것이 트릭을 수행할 것입니다.

#!/usr/bin/perl
use warnings;
use strict;

use Text::CSV;

my $csv = Text::CSV->new( { binary => 1, eol => "\n" } );

open( my $input, '<', 'test3.csv' ) or die $!;

while ( my $row = $csv->getline($input) ) {
   $row->[2] = "";
   $csv -> print( \*STDOUT, $row );
}

(대신 출력 파일을 열고 print해당 파일을 열 수도 있습니다).

관련 정보