如何通过使用 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

相关内容