Para constar, esse trecho que citei no primeiro e-mail deve ser evitado $0 !~ /^[09]{5}/ E justifico, nesse caso a ER vai filtrar o 00000 e 99999, ma também pode filtrar 00009 ou 90900. Melhor usar no lugar: $0 !~ /^(0|9){5}/ ou $0 !~ /^(00000|99999)/
Mas para esse caso que vc citou podemos trocar por esse awk:
awk ' /^0{5}/ { dt_mov=substr($0,13,8); nm_programa=substr($0,21,8) } $0 !~ /^(0|9){5}/ { linha[substr($0,1,3) ";" substr($0,10,4)]++ } END { for (final in linha) print final ";" linha[final] ";" dt_mov ";" nm_programa } '
E na primeira linha do código, no lugar de: /^0{5}/ { dt_mov=substr($0,13,8); nm_programa=substr($0,21,8) }
Se o HEADER for sempre na primeira linha, pode ser: NR==1 { dt_mov=substr($0,13,8); nm_programa=substr($0,21,8) } Isso se houver apenas um HEADER
E se houver mais de um TRAILLER e não apenas no final, no lugar de: END { for (final in linha) print final ";" linha[final] ";" dt_mov ";" nm_programa } pode-se trocar por: /^9{5}/ { for (final in linha) print final ";" linha[final] ";" dt_mov ";" nm_programa; split("", linha) }