我有第七列,其值如下:
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