Eliminar espacios y encabezados de una tabla de base de datos volcada

Eliminar espacios y encabezados de una tabla de base de datos volcada

He volcado los datos de la tabla de la base de datos en un archivo plano y a continuación se muestra cómo se ven los datos: (Copiar desde abajo

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

Quiero convertir lo anterior al siguiente formato:

La fila debe contener el número de secuencia (prefijo). Es necesario eliminar los nombres de las columnas y los espacios en blanco presentes en el archivo original al principio y al final.

A CONTINUACIÓN SE MUESTRA EL FORMATO DE DATOS QUE OBTENGO AL UTILIZAR EL CÓDIGO SUGERIDO:

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

FORMATO después de ejecutar el script anterior:

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)

Arriba: el número de fila del prefijo no aparece en secuencia (incrementando utilizando las líneas anteriores que no son los datos reales). El archivo inicial contenía información adicional en un archivo plano como el nombre de la columna @ comienzo, al final del archivo algunos detalles adicionales que quería, como el recuento de registros, etc.

Quiero los datos en el siguiente formato (que tendrá un número de fila de prefijo e incluirá solo filas de la tabla, no los datos adicionales anteriores y superiores)

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.

Respuesta1

awk -F ' *; *' \
  '{printf "%d;",NR; for(i=2;i<=NF;i++) printf "%s;",$i; print "";}' file

-Festablece el separador de campo para la expresión regular *; *(es decir, "punto y coma con cualquier número (excepto cero) de espacios en ambos lados").

O, más simple:

awk -F ' *; *' -v OFS=";" '{$1=NR; $(NF+1)=""; NF--; print}' file

$(NF+1)=""; NF--;simplemente impone el recálculo de $0pero ahora con el OFSseparador de campo cambiado.

Aún más simple:

awk -F ';' '{gsub(" +",""); print NR "" $0;}' file

Si awktambién "procesará" (es decir, ignorará) las líneas principales:

awk -F ';' '/^;-----------;/ {start=1;next;}; 
  start==0 {next;}; /^[^;]|^$/ { exit;}; { line_nr++; gsub(" +",""); print line_nr "" $0;}' file

editar

No presté suficiente atención y olvidé adaptar el número de línea en el último ejemplo. Como las líneas leídas ya no son lo mismo que las líneas escritas (simples), NR ya no se puede utilizar.

editar 2

La adición de /^[^;]|^$/ { exit;};detiene el procesamiento si aparece una línea que no comienza con ;.

Respuesta2

Usando sedyawk

sed -e '/^; *NULL/ s/ *//g' file | sed -n '/^;NULL.*/,$p' | awk '{print NR$0}'
  • sed -e '/^; *NULL/ s/ *//g' file- Elimina los espacios en las líneas que comienzan con ; NLL.

  • sed -n '/^;NULL.*/,$p' - Elimina todas las líneas anteriores a la línea que comienza con ; NULL.

  • awk '{print NR$0}' - imprime todas las líneas precedidas por su valor NR.

Respuesta3

Creo que incluso sedy awkpodría ser un poco exagerado aquí.

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

PRODUCCIÓN

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;

información relacionada