【发布时间】:2017-04-23 01:38:17
【问题描述】:
我正在解析一个如下所示的 auth.log 文件:
Dec 4 00:22:36 ip-172-31-23-55 sshd[3033]: Connection from 85.93.5.70 port 50208 on 172.31.23.55 port 22
转换成如下所示的 CSV 输出:
Dec, 4, 00 22 36, 85.93.5.69
下面的 awk 代码正确地产生了我想要的,就像在上面的例子中一样:
BEGIN {
OFS=", "
}
{
gsub(/:/, " ", $3)
match($0, /([1-9]{1,3}[\.]){3}[0-9]{1,3}/)
print $1, $2, $3, substr($0, RSTART, RLENGTH)
}
但是,如果我翻转 gsub 和 match 函数,如
BEGIN {
OFS=", "
}
{
match($0, /([1-9]{1,3}[\.]){3}[0-9]{1,3}/)
gsub(/:/, " ", $3)
print $1, $2, $3, substr($0, RSTART, RLENGTH)
}
我得到以下输出:
Dec, 4, 00 22 36, from, 85.
这没什么意义。 gsub 只是在寻找“:”,并且匹配找到了一个 IP 地址。使用 sub 而不是 gsub 时会观察到相同的行为。
我很困惑这些功能是如何相互影响的。
【问题讨论】: