Veja um script awk
:
awk '
function show(){
if(lastkey=="")return
printf "%-10s ",lastkey
for(i=3;i<=NF;i++)printf "%9f ",values[i]
printf "\n"
}
/MOLECULAR ORBITALS/ {F=1}
F && ~/[0-9]+[A-Z]+/ {
key = ; subkey=; gsub(/[^a-z]/,"",subkey);
newkey = key " " subkey;
if(lastkey == newkey)
for(i=3;i<=NF;i++)values[i] += $i
else{
show();
lastkey = newkey;
for(i=3;i<=NF;i++)values[i] = $i
}
}
END{ show(); }
' test.out
A função show()
no início é permitir que o último conjunto de
valores a serem impressos em eof sem duplicar o código.
O gsub()
remove os dígitos do segundo campo ($ 2).
newkey é então a concatenação do 1º campo com isso, para testar
nas linhas posteriores para similaridade.
Quando as linhas são semelhantes, os campos 3 até o final (número de campos NF) são
adicionados aos valores anteriores, senão eles são impressos e zerados.