Remover espaços e cabeçalhos de uma tabela de banco de dados descartada

2

Eu joguei os dados da tabela do banco de dados em um arquivo simples e abaixo está como os dados se parecem: (Por favor, copie de baixo

;metier_code              ;
;-------------------------;

(0 rows affected)
;CRDS_Ptf_No;          ;                                ;                         ;          ;                                ; ;                         ;                         ;               ;               ;               ;                         ;                         ;     ;Status;
;-----------;----------;--------------------------------;-------------------------;----------;--------------------------------;-;-------------------------;-------------------------;---------------;---------------;---------------;-------------------------;-------------------------;-----;------;
;       NULL;ABCD      ;ABHJARS                         ;                         ;ABCD      ;ABCD                            ;Y;                         ;                         ;               ;               ;               ;                         ;                         ;     ;A     ;
;       1234;XEU-ANKD  ;XEU-AJKD                        ;                         ;ABCD      ;ABCD                            ;Y;                         ;                         ;               ;               ;               ;                         ;                         ;     ;A     ;
.
.
;      11745;ANJLDMAOKD;AMKDJ AN DJ JAHF AS CPFVH ACCR  ;NONE                     ;AN DJ JAHA;AN DJ JAHA                      ;Y;NO ANKIO GAP             ;YES AMK SCF              ;               ;               ;               ;                         ;                         ;     ;I     ;
;      11744;AMKDIONSKH;AMKDJ AN DJ JAHF AS CPFVH MTM   ;NONE                     ;AN DJ JAHA;AN DJ JAHA                      ;Y;NO ANKIO GAP             ;YES AMK SCF              ;               ;               ;               ;                         ;                         ;     ;I     ;

(5436 rows affected)
(return status = 0)

Return parameters:

;           ;
;-----------;
;       5436;


(1 row affected)
;       ;           ;
;-------;-----------;
;grepkey;       5436;

(1 row affected)

deseja converter o formato acima como abaixo:

A linha deve conter o seq no (Prefixado) Precisa remover os nomes das colunas e os espaços em branco presentes no arquivo original no início e no final.

ABAIXO ESTÁ O FORMATO DOS DADOS QUE ESTOU OBTIDO USANDO O CÓDIGO SUGERIDO:

awk -F ';' '/^;-----------;/ {start=1;next;};  start==0 {next;}; {gsub(" +",""); print NR "" $0;}' temp_file > test

FORMATAR depois de executar o script acima:

7;NULL;ABCD;ABHJARS;;ABCD;ABCD;Y;;;;;;;;;A;
8;NULL;XEU-ANKD;XEU-AJKD;;ABCD;ABCD;Y;;;;;;;;;A;
.
.
5443;11744;AMKDIONSKH;AMKDJ AN DJ JAHF AS CPFVH MTM;;QWERDF;QWERDF;Y;;;;;;;;;A;
5444
5445(5436rowsaffected)
5446(returnstatus=0)
5447
5448Returnparameters:
5449
5450;;
5452;5436;
5453
5454
5455(1rowaffected)
5456;;;
5457;-------;-----------;
5458;grepkey;5436;
5459
5460(1rowaffected)

Acima: o número da linha do prefixo não está vindo em seqüência (Incrementando usando as linhas precedentes que não são os dados reais). O arquivo inicial continha informações adicionais em arquivo simples, como nome da coluna @ início, no final do arquivo, alguns detalhes adicionais que eu queria, como contagem de registros, etc.

Eu quero os dados no formato abaixo (que deve ter o número da linha do prefixo e deve incluir apenas as linhas da tabela, não os dados precedentes e excedentes adicionais)

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

5436 - is the number of rows present in the table from where i am fetching the data.

Obrigado antecipadamente!

(Tentei as outras soluções sugeridas também. No entanto, dint obteve o resultado desejado)

    
por Rajiv 06.05.2014 / 13:09

3 respostas

4

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 ; .

    
por 06.05.2014 / 13:25
3

Usando sed e awk

sed -e '/^; *NULL/ s/ *//g' file | sed -n '/^;NULL.*/,$p' | awk '{print NR$0}'
  • sed -e '/^; *NULL/ s/ *//g' file - Remove os espaços nas linhas que começam com ; NLL .

  • sed -n '/^;NULL.*/,$p' - Remove todas as linhas antes da linha que começa com ; NULL .

  • awk '{print NR$0}' - imprime todas as linhas precedidas por seu valor de NR.

por 06.05.2014 / 13:38
0

Acho que até sed e awk podem ser um pouco exagerados aqui.

grep '^;.*NULL' <<\DATA | tr -d '[:blank:]' | grep -n .

;metier_code              ;
;-------------------------;

(0 rows affected)
;CRDS_Ptf_No;          ;                                ;                         ;          ;
             ; ;                         ;                         ;               ;               ;
  ;                         ;                         ;     ;Status;
;-----------;----------;--------------------------------;-------------------------;----------;--------------------------------;-;-------------------------;-------------------------;---------------;---------------;---------------;-------------------------;-------------------------;-----;------;
;       NULL;ABCD      ;ABCD                            ;                         ;ABCS      ;ABCS
             ;Y;                         ;                         ;               ;               ;
  ;                         ;                         ;     ;A     ;
;       NULL;PKG-ABCP  ;UEX-SWAP                        ;                         ;ABCS      ;ABCS
             ;Y;                         ;                         ;               ;               ;
  ;                         ;                         ;     ;A     ;
;       NULL;SWAPOLEIL ;SWAPOLEIL                       ;                         ;QWERDF    ;QWERDF
             ;Y;                         ;                         ;               ;               ;
  ;                         ;                         ;     ;A     ;
DATA

OUTPUT

1:;NULL;ABCD;ABCD;;ABCS;ABCS;Y;;;;;;;;;A;
2:;NULL;PKG-ABCP;UEX-SWAP;;ABCS;ABCS;Y;;;;;;;;;A;
3:;NULL;SWAPOLEIL;SWAPOLEIL;;QWERDF;QWERDF;Y;;;;;;;;;A;
    
por 07.05.2014 / 06:24