código awk para multiplicar a coluna dada pelo número no arquivo separado por espaço

0

Eu tenho um arquivo separado por espaço. Eu quero fazer alguma operação matemática em determinada coluna. por exemplo. Eu quero multiplicar a coluna 2 por 1e6. Eu posso usar o seguinte comando:

awk 'BEGIN { FS=","; OFS=","; } {print $1,$2=$2*1e6,$3,$4}' result.txt

Meu problema é que meu arquivo pode conter qualquer número de colunas. Nesse caso, qual deve ser o meu comando awk ? Digamos que meu arquivo tenha 25 colunas e eu quero multiplicar a coluna 15 por 100. Como posso fazer isso em awk ?

    
por John 17.08.2016 / 16:51

2 respostas

1

Em vez de imprimir todos os campos, você pode imprimir a linha inteira com $0 .

Isso pode funcionar porque podemos alterar campos atribuindo dados a eles

por exemplo

$2=$2*100

atualizará o segundo campo e deixará o restante intocado:

% echo '1 2 3 4' | awk '{$2=$2*100; print $0}'
1 200 3 4

Podemos diminuir isso fazendo uso de padrões; Por exemplo, print por conta própria imprime $0

awk '{$2=$2*100; print}'

Podemos até usar ações padrão:

awk '{$2=$2*100} 1'

Mas, em geral, recomendo a versão mais longa porque é mais fácil para outras pessoas lerem e entenderem; A manutenção do código é tão importante quanto a concisão:

awk '{$2=$2*100; print $0}'
    
por 17.08.2016 / 17:07
1

Você não precisa saber o número de colunas, basta atualizar o que precisa e awk irá montá-las novamente:

awk '{ $15 *= 100 } 1' file.csv

Mas você também pode usar NF se precisar, diga assim:

awk '{ $15 *= 100; for(i=1; i<=NF; i++) printf(" %d", $i); print "\n" }' file.csv
    
por 17.08.2016 / 17:08

Tags