awk -F ' *; *' \
'{printf "%d;",NR; for(i=2;i<=NF;i++) printf "%s;",$i; print "";}' file
-F
define o separador de campo ro o regex *; *
(ou seja, "ponto-e-vírgula com qualquer número (zero de exclusão) de espaços em ambos os lados").
Ou mais simples:
awk -F ' *; *' -v OFS=";" '{$1=NR; $(NF+1)=""; NF--; print}' file
$(NF+1)=""; NF--;
apenas impõe a recomputação de $0
, mas agora com o separador de campo OFS
alterado.
Ainda mais simples:
awk -F ';' '{gsub(" +",""); print NR "" $0;}' file
Se awk
"processar" (ou seja, ignorar) as linhas principais, também:
awk -F ';' '/^;-----------;/ {start=1;next;};
start==0 {next;}; /^[^;]|^$/ { exit;}; { line_nr++; gsub(" +",""); print line_nr "" $0;}' file
editar
Eu não prestei atenção suficiente e esqueci de adaptar o número da linha no último exemplo. Como as linhas de leitura não são mais as mesmas que as linhas escritas, a NR (simples) não pode mais ser usada.
editar 2
A adição de /^[^;]|^$/ { exit;};
interrompe o processamento se ocorrer uma linha que não comece com ;
.