Como posso formatar um arquivo simples usando o awk?

Como posso formatar um arquivo simples usando o awk?

Abaixo está o formato de alguns dados da tabela contidos em um único arquivo:

;NULL;ABCD;ABHJARS;;ABCD;ABCD;Y;;;;;;;;;A;
;NULL;XEU-ANKD;XEU-AJKD;;ABCD;ABCD;Y;;;;;;;;;A;
.
.
;11744;AMKDIONSKH;AMKDJ AN DJ JAHF AS CPFVH MTM;;QWERDF;QWERDF;Y;;;;;;;;;A;

(5436rowsaffected)
(returnstatus=0)

Returnparameters:

;;
;5436;


(1rowaffected)
;;;
;-------;-----------;
;grepkey;5436;

(1rowaffected)

OBSERVAÇÃO:Acima grepkey=5436(Contagem dos registros presentes na tabela).

Abaixo está o resultado esperado:

1;NULL;ABCD;ABHJARS;;ABCD;ABCD;Y;;;;;;;;;A;
2;NULL;XEU-ANKD;XEU-AJKD;;ABCD;ABCD;Y;;;;;;;;;A;
.
.
5436;11744;AMKDIONSKH;AMKDJ AN DJ JAHF AS CPFVH MTM;;QWERDF;QWERDF;Y;;;;;;;;;A;

Preciso dos dados no formato acima. Gostaria de prefixar o número da linha e excluir os dados adicionais presentes no final do arquivo, como contagem de registros na tabela, etc.

Além disso, gostaria de realizar o procedimento acima usando awk.

Responder1

Não tenho certeza se entendi corretamente. Acho que você deseja adicionar o número da linha a cada linha e remover tudo após a primeira linha em branco. Nesse caso, isso será suficiente:

awk '{if($1){print NR$0}else{exit}}' file 

Explicação

  • if($1){print NR$0}: se esta linha tiver um 1º campo (uma forma simples de verificar se a linha está vazia), imprima o número da linha atual ( NR) e a linha $0.
  • else{exit}: pare o script na primeira linha vazia.

Responder2

awk -v n=$( grep -oP '(?<=grepkey;)\d+' file ) 'NR <= n {print NR ";" $0}' file

Aqui eu uso um comando GNU grep para extrair o valor "grepkey" do arquivo e, em seguida, um script awk para imprimir as primeiras "n" linhas do arquivo, com o número da linha anexado.

informação relacionada