¿Cómo puedo sumr valores en la columna en función del valor en otra columna?

Tengo un archivo de texto que es:

ABC 50 DEF 70 XYZ 20 DEF 100 MNP 60 ABC 30 

Quiero una salida que resum valores individuales y los muestre como resultado. Por ejemplo, el total de todos los valores ABC en el archivo son (50 + 30 = 80) y DEF es (100 + 70 = 170). Por lo tanto, la salida debe resumir todos los nombres únicos de la primera columna como:

 ABC 80 DEF 170 XYZ 20 MNP 60 

Cualquier ayuda será apreciada.

Gracias

 $ awk '{a[$1]+=$2}END{for(i in a) print i,a[i]}' file ABC 80 XYZ 20 MNP 60 DEF 170 
  $ perl-lane \
     '$ sum {$ F [0]} + = $ F [1];
      END {print "$ _ $ sum {$ _}"
              para ordenar grep length, keys% sum} '\
     entrada
 ABC 80
 DEF 170
 MNP 60
 XYZ 20 

awk '{sums[$1] += $2} END { for (i in sums) printf("%s %s\n", i, sums[i])}' input_file | sort

si no necesita los resultados ordenados alfabéticamente, simplemente suelte el | sort | sort parte

 perl -lane '$_{$F[0]}+=$F[1]}print"$_ $_{$_}"for keys%_;{' file 

Y un poco menos directo:

 perl -ape '$_{$F[0]}+=$F[1]}map$\.="$_ $_{$_}\n",keys%_;{' file 
 my %data; while (<>) { if (my ($key, $value) = /^(\w+) \s* (\d+)$/x) { $data{$key} += $value; } } printf "%s %s\n", $_, $data{$_} for keys %data; 
    Intereting Posts