我正在尝试从日志输出创建 CSV 文件
日志文件的两行示例:
May 24 2013 18:13:24 ROUTER1 %%01IFNET/4/UPDOWN(l): The state of interface GigabitEthernet0/0/22 was changed to DOWN.
May 24 2013 17:59:33 ROUTER1 %%01FIB/3/REFRESH_END(l): FIB refreshing end, the refresh group map is 0!
Run Code Online (Sandbox Code Playgroud)
预期输出:
May 24 2013 18:13:24,ROUTER1,01IFNET,4,UPDOWN,The state of interface GigabitEthernet0/0/22 was changed to DOWN.
May 24 2013 17:59:33,ROUTER1,01IFNET,3,REFRESH_END,FIB refreshing end, the refresh group map is 0!
Run Code Online (Sandbox Code Playgroud)
我可以设法用这个 awk 命令得到一些正确的部分:
cat test.log | awk -F'[" "%%/(l)]' '{print $1" "$2" "$3","$4","$5","$8","$9","$10","}'
Run Code Online (Sandbox Code Playgroud)
输出:
May 24 2013 18:13:24,ROUTER1,01IFNET,4,UPDOWN,
May 24 2013 17:59:33,ROUTER1,01IFNET,3,REFRESH_END,
Run Code Online (Sandbox Code Playgroud)
但是如何捕获“(l):”后的多列描述文本,例如“ FIB刷新结束,刷新组映射为0! ”或“接口GigabitEthernet0/0/22的状态更改为DOWN。 ”。请指教。
awk 可以处理多个分隔符:
$ awk -F'[(/% ]' '{printf "%s",$1" "$2" "$3" "$4" "$5","$8","$9","$10",";for(i=12;i<=NF;i++)printf "%s ",$i;print ""}' file
May 24 2013 18:13:24 ROUTER1,01IFNET,4,UPDOWN,The state of interface GigabitEthernet0 0 22 was changed to DOWN.
May 24 2013 17:59:33 ROUTER1,01FIB,3,REFRESH_END,FIB refreshing end, the refresh group map is 0!
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30104 次 |
| 最近记录: |