Como posso adicionar uma coluna a uma posição específica em um arquivo csv usando cat, sed, awk ou cut?

0

Eu tenho um arquivo csv com este conteúdo:

col1, col2, col5
1,    1,    1
2,    2,    2
3,    3,    3
4,    4,    4

Eu preciso adicionar uma coluna na terceira posição do arquivo com um cabeçalho, mas com valores vazios.

col1, col2, col3, col4
1,    1,        ,   1
2,    2,        ,   2
3,    3,        ,   3
4,    4,        ,   4

Existe alguma maneira de fazer isso usando um dos comandos do Linux como cat, sed, awk ou cut?

Eu sei que com o corte é possível modificar um arquivo pelas colunas cut -d , -f1,2,3 file1 > file2 . Mas parece que não tem a opção de adicionar uma coluna personalizada.

Qualquer ajuda seria muito apreciada.

    
por ebertbm 05.08.2016 / 13:21

2 respostas

2

A seguir, o comando sed para alcançar o resultado:

sed '1s/\(.*,\)\([^,]*\)$/col3,/;
     2,$s/\(.*,\)\([^,]*\)$/,/' file.csv

Isso encontra o último , em uma linha e o substitui por

  • col3, na primeira linha
  • , em todas as outras linhas

Este comando apenas imprime a saída necessária para stdout . Se você quiser editar o arquivo, dê -i para o comando acima.

    
por 05.08.2016 / 13:48
1
$ awk 'BEGIN { FS=","; OFS=",\t" };
       FNR == 1 { print $1,$2,"col3","col4" };
       FNR  > 1 { print $1,$2,"\t",$3 }' file.csv 
col1,    col2,  col3,   col4
1,      1,      ,       1
2,      2,      ,       2
3,      3,      ,       3
4,      4,      ,       4
    
por 06.08.2016 / 04:24