如何透過使用 awk 或 sed 向後讀取 csv 單元格值來列印第七列中的字串

如何透過使用 awk 或 sed 向後讀取 csv 單元格值來列印第七列中的字串

我有第七列,其值如下:

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

相關內容