¿Cómo puedo formatear un archivo plano usando awk?

¿Cómo puedo formatear un archivo plano usando awk?

A continuación se muestra el formato de algunos datos de la tabla contenidos en un solo archivo:

;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:Arriba grepkey=5436(Recuento de los registros presentes en la tabla).

A continuación se muestra el 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;

Necesito los datos en el formato anterior. Me gustaría anteponer el número de fila y excluir los datos adicionales que están presentes al final del archivo, como el recuento de registros en la tabla, etc.

Además, me gustaría lograr lo anterior usando awk.

Respuesta1

No estoy seguro de haber entendido correctamente. Creo que desea agregar el número de línea a cada fila y eliminar todo después de la primera línea en blanco. Si es así, esto será suficiente:

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

Explicación

  • if($1){print NR$0}: si esta línea tiene un primer campo (una forma sencilla de comprobar si la línea está vacía), imprima el número de línea actual ( NR) y la línea $0.
  • else{exit}: detiene el script en la primera línea vacía.

Respuesta2

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

Aquí utilizo un comando grep de GNU para extraer el valor "grepkey" del archivo, luego un script awk para imprimir las primeras "n" líneas del archivo, con el número de línea antepuesto.

información relacionada