Wie kann ich eine Flatfile mit awk formatieren?

Wie kann ich eine Flatfile mit awk formatieren?

Unten sehen Sie das Format einiger Tabellendaten, die in einer einzelnen Datei enthalten sind:

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

NOTIZ:Oben grepkey=5436(Anzahl der in der Tabelle vorhandenen Datensätze).

Unten ist die erwartete Ausgabe:

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;

Ich brauche die Daten im obigen Format. Ich möchte der Zeilennummer ein Präfix voranstellen und die zusätzlichen Daten ausschließen, die am Ende der Datei vorhanden sind, wie z. B. die Anzahl der Datensätze in der Tabelle usw.

Darüber hinaus möchte ich das oben genannte mithilfe von erreichen awk.

Antwort1

Ich bin nicht sicher, ob ich das richtig verstanden habe. Ich denke, Sie möchten, dass jeder Zeile die Zeilennummer hinzugefügt wird und dass alles nach der ersten leeren Zeile entfernt wird. Wenn ja, funktioniert das hier:

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

Erläuterung

  • if($1){print NR$0}: Wenn diese Zeile ein 1. Feld hat (eine einfache Möglichkeit zu prüfen, ob die Zeile leer ist), drucken Sie die aktuelle Zeilennummer ( NR) und die Zeile $0.
  • else{exit}: Stoppen Sie das Skript bei der ersten leeren Zeile.

Antwort2

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

Hier verwende ich einen GNU-Grep-Befehl, um den „Grepkey“-Wert aus der Datei zu extrahieren, und dann ein Awk-Skript, um die ersten „n“ Zeilen der Datei mit vorangestellter Zeilennummer auszudrucken.

verwandte Informationen