So drucken Sie eine Zeichenfolge in der 7. Spalte, indem Sie den CSV-Zellenwert mit awk oder sed rückwärts lesen

So drucken Sie eine Zeichenfolge in der 7. Spalte, indem Sie den CSV-Zellenwert mit awk oder sed rückwärts lesen

Ich habe eine 7. Spalte mit Werten wie:

OS:J:\output\Windows\System32\winevt\Logs\Security.evtx
OS:J:\output\Windows\System32\winevt\Logs\System.evtx

Ich möchte Informationen extrahieren, indem ich Werte rückwärts lese und in eine neue Spalte einfüge.

In eine neue Spalte, beispielsweise „Standort“, zu extrahierende Werte sollten folgendermaßen aussehen:

Location
Security.evtx
System.evtx

Antwort1

$ awk -F'\' '{print $7}' inputfile

Antwort2

Wie aktiviert. Letzte Spalte ist $7. Unter dem Befehl wurde der Wert extrahiert.

Befehl

sed -r 's/.*\\//g' filename

Ausgabe

Security.evtx
System.evtx

Antwort3

Vorausgesetzt, es gibt mindestens sechs weitere Felder, die Sie nicht vor dem siebten Feld mit den Daten in der Frage anzeigen, können Sie die CSV-Datei mit einem Tool wie lesenMüller( mlr), um ein neues locationFeld für Ihre neuen Werte zu erstellen.

Angenommen, Ihre CSV-Datei enthält Kopfzeilen (da Sie ein neues Feld erstellen möchten location) und die Kopfzeile für das siebte Feld lautet filepath, dann können Sie Folgendes tun:

mlr --csv put '$location = sub($filepath,".*\\","")' file

Die sub()Funktion entfernt den gesamten Text vor dem letzten Backslash im filepathFeld. Das Ergebnis dieser Operation wird dann dem neuen locationFeld zugewiesen.

Testen:

$ cat file
A,B,C,D,E,F,filepath
1,2,3,4,5,6,OS:J:\output\Windows\System32\winevt\Logs\Security.evtx
1,2,3,4,5,6,OS:J:\output\Windows\System32\winevt\Logs\System.evtx
$ mlr --csv put '$location = sub($filepath,".*\\","")' file
A,B,C,D,E,F,filepath,location
1,2,3,4,5,6,OS:J:\output\Windows\System32\winevt\Logs\Security.evtx,Security.evtx
1,2,3,4,5,6,OS:J:\output\Windows\System32\winevt\Logs\System.evtx,System.evtx
$ mlr --c2p --barred put '$location = sub($filepath,".*\\","")' file
+---+---+---+---+---+---+---------------------------------------------------------+---------------+
| A | B | C | D | E | F | filepath                                                | location      |
+---+---+---+---+---+---+---------------------------------------------------------+---------------+
| 1 | 2 | 3 | 4 | 5 | 6 | OS:J:\output\Windows\System32\winevt\Logs\Security.evtx | Security.evtx |
| 1 | 2 | 3 | 4 | 5 | 6 | OS:J:\output\Windows\System32\winevt\Logs\System.evtx   | System.evtx   |
+---+---+---+---+---+---+---------------------------------------------------------+---------------+

Möchten Sie die Änderung direkt vornehmen, fügen Sie die -IOption vorher --csvin der Befehlszeile hinzu.

Antwort4

awk -F ' / ' '{print $7} yourfilename

verwandte Informationen