如何解析NAT日志并进行特定的CSV输出

时间:2016-12-13 15:25:50

标签: parsing awk sed cut

我有一个NAT设备可以像这样制作NAT日志:

Dec 13 18:12:59 172.16.1.1 "LSN_DELETE""192.168.100.1%101:11921""TCP""100.100.100.100%101:11921""104.111.224.226:80""1481639868477""327573"

我想通过将此文件的每一行转换为:

来制作csv文件
192.168.100.1,11921,TCP,100.100.100.100,11921,104.111.224.226,80,1481639868477,327573

我知道我可以逐行读取文件并使用cut命令转换它,但是逐行读取文件非常慢并且文件非常大(500万行)。我想通过更快的awk或sed转换它。有人可以帮我这么做吗?

1 个答案:

答案 0 :(得分:1)

在awk中,部分解决方案(您必须按照自己喜欢的顺序添加字段):

gawk -F '[^.[:digit:][:alpha:]]*' -v OFS=, '{print $9,$15,$12}' file

即,假设日志位于名为file的文件中:

  • 使用字段分隔符(-F)断开每一行,其中是 假定(并且这可能不是100%,具体取决于您的数据)a 字段任意数量的连续句点,数字和字母字符。
  • 输出字段分隔符(OFS)设置为逗号
  • 打印,重新排列所选字段。

无法保证这比你之前做的更快。