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.