Problema ao adicionar uma coluna com o awk

3

Estou tentando adicionar uma coluna a um arquivo csv usando:

awk -F "," '{print $0"new_col"}' file.csv

mas eu tenho:

new_col8,0.405,0.101
new_col4,0.374,0.100
new_col23,0.342,0.100
new_col130,0.298,0.100

em vez de:

68,110,0.362,0.101,new_col
11,98,0.405,0.101,new_col
57,94,0.374,0.100,new_col
61,123,0.342,0.100,new_col
124,130,0.298,0.100,new_col

Eu também tentei assim:

awk -F "," '{{$(NF+1)=",new_col"} print $0 }' file.csv

mas eu tenho o mesmo resultado !!!

Alguém já teve esse problema?

    
por Aurore Vaitinadapoule 19.08.2014 / 06:37

3 respostas

0

Se o .csv estiver no formato DOS, outra opção pode ser:

tr -d \r <input.csv | sed 's/$/,new_col/'

... que lidaria com tudo de uma só vez.

    
por 19.08.2014 / 13:22
3

Seu arquivo csv de entrada está no formato DOS. O Microsoft DOS / Windows usa um retorno de carro ( \r , ^M , código ASCII 13) seguido por um avanço de linha ( \n , ^J ou ASCII código 10) no final de cada linha enquanto o Linux / Unix usa Apenas o feed de linha.

Para corrigir isso, execute:

$ dos2unix file.csv
dos2unix: converting file file.csv to Unix format ... 
$ awk '{print $0",new_col"}' file.csv

Observe a vírgula antes de new_col . Sem isso, print concatena new_col diretamente no final de $0 . Não há necessidade de indicar o separador de campo ( -F ) porque você não está dividindo a linha de entrada nos campos - você está usando apenas $0 .

    
por 19.08.2014 / 09:54
0

Isso funcionaria? awk -F, '{$(NF+1)="new_col";}1' OFS=, input.txt .

Isto irá mostrar a nova tabela na linha de comando. No exemplo, adicionei um arquivo de saída ( output.csv apenas no caso).

Antes de executar o comando:

$ cat input.csv
68,110,0.362,0.101
11,98,0.405,0.101
57,94,0.374,0.100
61,123,0.342,0.100
124,130,0.298,0.100

Executando o comando:

$ awk -F, '{$(NF+1)="new_col";}1' OFS=, input.csv > output.csv

Verificando o arquivo de saída:

$ cat output.csv
68,110,0.362,0.101,new_col
11,98,0.405,0.101,new_col
57,94,0.374,0.100,new_col
61,123,0.342,0.100,new_col
124,130,0.298,0.100,new_col

Exemplo de página

    
por 19.08.2014 / 06:48