Como insiro novas colunas em um arquivo .csv?

4

Exemplo de dados:

"Monday","12345","Friday" 

No arquivo acima, quero adicionar uma nova coluna entre 12345 e sexta-feira.

Como posso fazer isso?

    
por manivannan K N 02.03.2015 / 12:20

3 respostas

4

Para não envolver alguns instrumentos pesados (como sed ou awk ):

paste -d',' <(cut -d',' -f-2 file) column.file <(cut -d',' -f3- file)

Isso pressupõe que a coluna que você deseja adicionar está salva no arquivo column.file .

    
por 02.03.2015 / 13:30
2

Assumindo que seus dados são tão simples quanto você mostra, você pode fazer

awk -F, -v OFS=, '{k=$3; $3="\"new text\""; $4=k}1' file

Ou

perl -F, -lane 's/$F[1]/$F[1],"new text"/; print' file

No entanto, isso falhará com dados que podem conter vírgulas aninhadas como:

"foo", "bar,baz", "bar" 

O acima é um arquivo csv válido, mas essas soluções o tratarão como tendo 4 campos, não 3. Se seus dados puderem conter casos como esse, você deverá usar um analisador csv apropriado.

    
por 02.03.2015 / 13:39
0

Acabei de ter o mesmo problema, mas a resposta de cortar / colar não funcionou bem para mim, pois eu queria um campo em branco, então isso funcionou para mim:

  1. Descubra quantas linhas você tem no arquivo que está inserindo:

    wc -l file.csv
    
  2. digamos que 1. forneceu 30 e use um loop bash para inserir um campo nulo entre os campos 3 e amp; 4:

    paste -d, <(cut -d, -f-3 file.csv) <(for i in 'seq 1 30'; do echo; done) <(cut -d, -f4- file.csv) > fileNew.csv
    
por 30.01.2018 / 13:32