obtém valores únicos de 1 coluna e soma 2 colunas seguintes [fechadas]

0

Eu tenho um arquivo de texto com esta aparência:

A 500 100 ABC
B 200 100 BBB
B 200 100 ACC
D 150 235 CDD
A 500 100 RER
C 210 653 DDD
C 210 653 DWR
D 150 653 DDW
D 150 653 DER

O que eu tento realizar é filtrar o primeiro para nomes exclusivos e obtenha um total de todo o valor por trás (soma das colunas 2 e 3), por exemplo:

A 1000 200
B 400 200

Eu meio que trabalhei para os dois primeiros com a seguinte linha de awk:

awk '{a[$1]+=$2} END {for(i in a) print i,a[i] }' file

Isso resulta em:

A 1000
B 400

Eu estou preso em adicionar a 3ª coluna no mix. Alguém tem a dica para adicionar a coluna 3?

    
por CharNL 29.03.2016 / 21:35

1 resposta

2

Experimente esta versão testada:

awk '{ colone[$1]+=$2; coltwo[$1]+=$3; } END { for (i in colone) { print i " " colone[i] " " coltwo[i]; }}' file

Ele está usando matrizes associativas, veja o famoso tutorial Awk - Um tutorial e introdução - por Bruce Barnett

O teste está abaixo:

awk '{ colone[$1]+=$2; coltwo[$1]+=$3; } END { for (i in colone) { print i " " colone[i] " " coltwo[i]; }}' file
A 1000 200 
B 400 200
C 420 1306
D 450 1541
    
por 29.03.2016 / 23:31