Supondo que não haja números de linha em sample.txt
:
cut -f 1 -d _ sample.txt | awk '{a[$2] += $1} END{for (i in a) print a[i], i}'
Você pode adicionar | sort -k 2
no final.
EDIT1 - explicação conforme solicitado:
O comando cut
corta todas as linhas com _
delimitador e salva somente a primeira parte. Você já fez isso com o seu arquivo original.
Em seguida, o comando awk
localiza dois campos em cada linha. Nós os chamamos tamanho e nome , mas awk
refere-se a eles como $1
e $2
internamente. Para cada linha, incrementa-se um elemento de uma matriz a
(o nome a
é arbitrariamente escolhido e não tem nada a ver com o nome do arquivo na amostra). O nome $2
informa qual elemento incrementar - é um índice; o tamanho $1
é o valor de incremento. awk
é inteligente o suficiente para inicializar o elemento a
com 0
, como é mencionado pela primeira vez. O elemento particular é incrementado toda vez que seu índice ( nome ) aparece como um segundo campo da linha de entrada. No final (após a última linha da entrada) awk
passa por todos os índices conhecidos de a
e imprime o valor (que é agora tamanho cumulativo ) e um índice ( nome ).