我有第七列,其值如下:
OS:J:\output\Windows\System32\winevt\Logs\Security.evtx
OS:J:\output\Windows\System32\winevt\Logs\System.evtx
我想透過向後讀取值來提取資訊並放入新列中。
要在新列中提取的值,假設“位置”應如下所示:
Location
Security.evtx
System.evtx
答案1
$ awk -F'\' '{print $7}' inputfile
答案2
如檢查最後一列是 $7 使用下面的命令來提取值
命令
sed -r 's/.*\\//g' filename
輸出
Security.evtx
System.evtx
答案3
假設在問題資料的第 7 個欄位之前至少還有 6 個欄位未顯示,您可以使用下列工具讀取 CSV 文件磨坊主( )為您的新值mlr
建立一個新欄位。location
進一步假設您的 CSV 檔案中有標題(因為您想要建立一個新location
欄位)並且第 7 個欄位的標題為filepath
,那麼您可以執行以下操作:
mlr --csv put '$location = sub($filepath,".*\\","")' file
該sub()
函數將刪除字段中最後一個反斜杠之前的所有文字filepath
。然後將該操作的結果指派給新location
欄位。
測試:
$ 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 |
+---+---+---+---+---+---+---------------------------------------------------------+---------------+
您想要就地進行更改,然後在命令列上新增-I
先前的選項。--csv
答案4
awk -F ' / ' '{print $7} yourfilename