Como obter contagem de linhas exclusivas em um arquivo?

1

Eu tenho uma lista de identificadores na coluna 1 e contagens correspondentes na coluna 2. O arquivo se parece com algo assim:

KDO65387         65
KDO65387         27
XP_006465447     971
XP_006482015     1207
XP_003630414     194
XP_002513282     500
XP_003630414     23

O que eu quero é somar os valores na coluna # 2 se os valores na coluna # 1 em linhas consecutivas corresponderem. A saída ficará assim:

KDO65387    92
XP_006465447    971
XP_006482015    1207
XP_003630414    217
XP_002513282    500
    
por vijay lakhujani 12.08.2017 / 08:18

3 respostas

3

Se o pedido é importante:

awk '!($1 in sum) {f[n++] = $1}
     {sum[$1] += $2}
     END {for (i = 0; i < n; i++) print f[i], sum[f[i]]}' < file

Se não, você pode simplificá-lo para:

awk '{sum[$1] += $2}
     END {for (f in sum) print f, sum[f]}' < file
    
por 12.08.2017 / 08:42
3

Usando datamash :

datamash groupby 1 sum 2 <infile.txt
    
por 12.08.2017 / 08:58
1
perl -lane '
   exists $h{$F[0]} or push @h, $F[0];
   $h{$F[0]} += $F[1];
   END { print "$_\t$h{$_}" for @h; }
' yourfile

O texto acima irá imprimir as chaves na ordem em que foram encontradas. O array mantém a ordem das chaves enquanto o hash mantém a soma correspondente a cada tecla.

    
por 12.08.2017 / 12:34