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

How parse line of NAT log and make a specific CSV output

我有一个 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 转换它。有人可以帮我做吗?

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

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

也就是说,假设日志位于名为 file:

的文件中
  • 它使用字段分隔符 (-F) 分隔每一行,其中 假设(根据您的数据,这可能不是 100%) 字段任意数量的连续句点、数字和字母字符。
  • 输出字段分隔符 (OFS) 设置为逗号
  • 已打印并重新排列所选字段。

不保证这会比您之前做的更快。