Entfernen Sie Leerzeichen und Überschriften aus einer gedumpten Datenbanktabelle

Entfernen Sie Leerzeichen und Überschriften aus einer gedumpten Datenbanktabelle

Ich habe die Daten der Datenbanktabelle in eine flache Datei übertragen und unten sehen Sie, wie die Daten aussehen: (Bitte kopieren Sie von unten

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

möchte das Obige in das folgende Format konvertieren:

Die Zeile sollte die Sequenznummer (mit Präfix) enthalten. Spaltennamen und Leerzeichen, die in der Originaldatei am Anfang und Ende vorhanden sind, müssen entfernt werden.

UNTEN IST DAS DATENFORMAT ANGEGEBEN, DAS ICH DURCH VERWENDUNG DES VORGESCHLAGENEN CODE ERHALTE:

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

FORMAT nach Ausführung des obigen Skripts:

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)

Oben: Die Zeilennummer des Präfixes kommt nicht in der richtigen Reihenfolge (Inkrementierung durch Verwendung der vorhergehenden Zeilen, die nicht die tatsächlichen Daten sind). Die ursprüngliche Datei enthielt zusätzliche Informationen in einer Flatfile wie Spaltennamen am Anfang, am Ende der Datei einige zusätzliche Details, die ich wollte, wie die Anzahl der Datensätze usw.

Ich möchte die Daten im folgenden Format (das eine vorangestellte Zeilennummer haben soll und nur die Zeilen der Tabelle enthalten soll, nicht die zusätzlichen vorangehenden und darüber liegenden Daten)

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.

Antwort1

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

-Fsetzt den Feldtrenner auf den regulären Ausdruck *; *(also „Semikolon mit beliebiger Anzahl (einschließlich Nullen) von Leerzeichen auf beiden Seiten“).

Oder einfacher:

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

$(NF+1)=""; NF--;erzwingt lediglich die Neuberechnung, $0jetzt jedoch mit dem geänderten OFSFeldtrennzeichen.

Noch einfacher:

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

Es awksollen auch die führenden Zeilen „verarbeitet“ (also ignoriert) werden:

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

bearbeiten

Ich habe nicht richtig aufgepasst und vergessen, im letzten Beispiel die Zeilennummer anzupassen. Da gelesene Zeilen nicht mehr dasselbe sind wie geschriebene Zeilen (einfache Zeilen), kann NR nicht mehr verwendet werden.

bearbeiten 2

Das Hinzufügen von /^[^;]|^$/ { exit;};stoppt die Verarbeitung, wenn eine Zeile auftritt, die nicht mit beginnt ;.

Antwort2

Verwenden sedundawk

sed -e '/^; *NULL/ s/ *//g' file | sed -n '/^;NULL.*/,$p' | awk '{print NR$0}'
  • sed -e '/^; *NULL/ s/ *//g' file- Entfernt die Leerzeichen in den Zeilen, die mit beginnen ; NLL.

  • sed -n '/^;NULL.*/,$p' - Entfernt alle Zeilen vor der Zeile, die mit beginnt ; NULL.

  • awk '{print NR$0}' – druckt alle Zeilen, denen der NR-Wert vorangestellt ist.

Antwort3

Ich denke sogar, dass sedes awkhier etwas übertrieben sein könnte.

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

AUSGABE

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;

verwandte Informationen