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 location
Feld 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 filepath
Feld. Das Ergebnis dieser Operation wird dann dem neuen location
Feld 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 -I
Option vorher --csv
in der Befehlszeile hinzu.
Antwort4
awk -F ' / ' '{print $7} yourfilename