adicionando coluna no arquivo CSV usando o awk

2

Eu preciso adicionar uma coluna no arquivo CSV de uma matriz usando o awk.

Por exemplo,

input.csv

a,10
b,11

array = (100 200)

output.csv deve ser parecido com

a,10,100
b,11,200

Eu tentei este comando mas não funciona

awk -F"," 'BEGIN { OFS = "," } {for (x in array) $3=array[x]; print}' input.csv> output.csv
    
por Rauf 28.08.2015 / 05:11

2 respostas

3

Você precisa usar awk para isso? O utilitário paste foi projetado exatamente para esse tipo de coisa. Assumindo que array é uma matriz de shell:

array=(100 200)
printf "%s\n" "${array[@]}" | paste -d, input.csv - > output.csv

O printf é simplesmente colocar cada membro da matriz em uma nova linha. paste , em seguida, cola as linhas de entrada de input.csv e - (isto é, a saída canalizada de printf ), usando uma vírgula como um delimitador.

Se a sua matriz for um arquivo separado por nova linha, por exemplo array.txt:

100
200

então é ainda mais fácil:

paste -d, input.csv array.txt > output.csv
    
por 28.08.2015 / 07:10
0

O problema é que as variáveis do shell (incluindo arrays) não estão disponíveis dentro de awk . Você precisa passá-las explicitamente através da opção -v . Além disso, você não pode passar a matriz inteira, mas você pode colocar array em variável única e dividi-lo em awk :

awk -va="$(echo "${array[@]}")" 'BEGIN{OFS=FS=","; split(a,b," ")}{print $0,b[NR]}' input.csv

Isso funcionará, desde que você não tenha espaços dentro dos elementos da matriz.

    
por 28.08.2015 / 05:37