Como posso formatar um arquivo simples usando o awk?

1

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)

NOTA: Acima de grepkey=5436 (contagem dos registros presentes na tabela).

Abaixo está a saída esperada:

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;

Eu preciso dos dados no formato acima. Eu gostaria de prefixar o número da linha e excluir os dados adicionais que estão presentes no final do arquivo, como a contagem de registros na tabela, etc.

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

    
por Rajiv 08.05.2014 / 13:43

2 respostas

1

Não tenho certeza se entendi corretamente. Eu acho que você quer o número da linha adicionado a cada linha e remover tudo após a primeira linha em branco. Em caso afirmativo, isso será feito:

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

Explicação

  • if($1){print NR$0} : se essa linha tiver um primeiro campo (uma maneira 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.
por 08.05.2014 / 13:52
1
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 precedido.

    
por 08.05.2014 / 21:07