Use este awk
:
awk '/CARTESIAN COORDINATES \(A.U.\)/{a=1;next} a==1&&/NO LB/{b=1;next} $0==""{exit}
a==1&&b==1{c[$2]++} END{for(i in c){printf "%s%s", i,c[i]}}' file
-
/CARTESIAN COORDINATES \(A.U.\)/{a=1;next}
: Este bloco pesquisa porCARTESIAN COORDINATES (A.U.)
e, em seguida, define a variávela
para1
,next
significa saltar para a próxima linha e iniciar o processamento novamente com essa linha. -
a==1&&/NO LB/{b=1;next}
verifica sea
é1
e se a segunda stringNO LB
é encontrada em algum lugar na linha. Ele define a variávelb
e, em seguida, carrega a linhanext
. -
$0==""{exit}
: Então, se a linha estiver vazia, saia do processamento (salta para o blocoEND{}
). -
a==1&&b==1{c[$2]++}
: Se ambas as correspondências forem encontradas (a
eb
equal1
), incremente uma matriz chamadac
com índice$2
(campo 2). Isso contará as ocorrências de cada valor no segundo campo. -
END{...}
: Isso será executado quando o processamento do arquivo estiver concluído (a matriz está preenchida).-
for(i in c)
é executado por cada elemento na matriz ... -
printf "%s%s", i,c[i]
: ... e imprima o índice e o valor.
-
A saída (com o seu arquivo de exemplo):
C5H2