Adicione todas as colunas separadamente no linux se a primeira coluna tiver as mesmas entradas [duplicate]

1

Eu tenho esta saída filename.txt

AC1481523 001 001 001 001
AC1481523 005 005 005 005
AC1481676 003 003 005 004
AC1481676 003 002 001 004

Eu quero adicionar todas as colunas separadamente, onde a primeira coluna tem o mesmo valor. Eu tentei isso

awk '{for (j = 1; j <= 200; j++) a[$1]+=$j} END {for(i in a) print i,a[i] }' filename.txt

Recebo todos os números adicionados em uma única coluna e obtenho

AC1481523 24
AC1481676 25

Mas eu quero

AC1481523 6 6 6 6 
AC1481676 6 5 6 8

Eu sou novo no bash scripting gentilmente me guie

    
por KHAN irfan 03.10.2016 / 13:55

1 resposta

0

Aqui está uma maneira:

$ awk '{ for (j = 2; j <= NF; j++) a[$1][j]+=$j }
       END {
            for(i in a){
                printf "%s", i; 
                for(field in a[i]){ 
                    printf " %s",a[i][field] 
                } 
                print ""
            }
        }' file 
AC1481676 6 5 6 8
AC1481523 6 6 6 6

Note que eu iniciei j contando a partir de 2, pois não queremos o 1º campo e até NF (o número de campos) em vez de 200. Dessa forma, ele funcionará para um número arbitrário de campos, contanto que é > = 2. Então, o script está usando uma matriz multidimensional ( a[$1][j] ) para que, para cada primeiro campo, haja uma matriz de todos os valores associados. Por fim, iteramos pelo array, imprimindo conforme necessário.

    
por 03.10.2016 / 14:48