recorta uma coluna de matriz e une outra coluna a um arquivo csv

0

Eu tenho um arquivo CSV como

input.csv

1,2,3,"{1,2,3}",9,12
1,2,3,"{1,2,3}",9,12
1,2,3,"{1,2,3}",9,12

Eu precisava remover a coluna da matriz do arquivo CSV acima e obter a saída como

output.csv

1,2,3,9,12
1,2,3,9,12
1,2,3,9,12

Então eu tentei

cut -d , -f4 -- complement input.csv > output.csv

Mas o comando acima deu o erro

The delimiter must be a single character

Eu também quero entrar no output.csv com outro arquivo CSV

column.csv
30
36
90

Em seguida, o resultado seria parecido com

result.csv
1,2,3,9,12,30
1,2,3,9,12,36
1,2,3,9,12,90

Alguém poderia me ajudar?

    
por joker21 24.10.2016 / 05:04

2 respostas

0

Para lidar adequadamente com os delimitadores citados, você deve considerar o uso de um analisador CSV desenvolvido para a finalidade - por exemplo, aquele do módulo perl Text :: CSV. Por exemplo,

paste -d, input.csv column.csv | perl -MText::CSV -ne '
  BEGIN {$csv = Text::CSV->new()}
  if ($csv->parse($_)) {
    @a = $csv->fields();
    splice(@a, 3, 1);
    print join(",", @a) . "\n";
  }'
1,2,3,9,12,30
1,2,3,9,12,36
1,2,3,9,12,90
    
por 24.10.2016 / 05:43
0

Se você não quiser usar o analisador de CSV com finalidade específica, como sugerido por @steeldrive, use awk :

awk '{split($0,a,"\""); print a[1] substr(a[3],2)}' input.csv > output.csv

Esteja ciente de que isso funcionará apenas para o estilo fornecido no exemplo.

Explicação:

Divida o texto a cada "

{split($0,a,"\"")

Imprimir e remover o primeiro , da segunda coluna

print a[1] substr(a[3],2)
    
por 24.10.2016 / 14:58