Precisa remover uma coluna específica em um CSV [duplicado]

0

Exemplo de entrada:

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

Exemplo de saída após o primeiro comando sed

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

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

Saída desejada após o último comando:

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

A terceira coluna tem me dado problemas em um projeto e a solução mais fácil é simplesmente excluí-lo, pois não é necessário. As vírgulas devem permanecer, deve ter apenas conteúdo vazio.

Eu estava pensando que precisaria desenvolver um comando sed para remover as vírgulas contidas entre aspas antes do comando para excluir a terceira coluna, como imagino que a maneira mais fácil de fazer isso seria contar as vírgulas e depois apagar tudo entre a 2ª e a 3ª vírgula.

este é o comando sed que estou usando o delete as vírgulas dentro das aspas antes de prosseguir com a limpeza do conteúdo da terceira coluna

    
por Patrick Carey 09.01.2017 / 23:09

1 resposta

0

Algo parecido com isso fará o truque:

#!/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 );
}

(Você provavelmente deseja abrir um arquivo de saída e print para isso, embora).

    
por 10.01.2017 / 10:42