这是我的代码:
/usr/bin/gawk '{
!/simsX.ip-17-31-28-19/ { a[".*Unauthorized.*Dup.*"] += gsub("(| ).*Unauthorized.*Duplication.*( |)", "&") }
!/simsX.ip/ { a[".*En_NoConn-.*"] += gsub("(| ).*En_NoConn-.*( |)", "&") }
} END {
for (i in a)
printf("%s=%s\n", i, a[i])
}' /home/nagios/graphite-web_access.log
运行上面的代码时,出现以下错误:
gawk: cmd. line:2: !/simsX.ip-17-31-28-19/ { a[".*Unauthorized.*Dup.*"] += gsub("(| ).*Unauthorized.*Duplication.*( |)", "&") }
gawk: cmd. line:2: ^ syntax error
gawk: cmd. line:3: !/simsX.ip/ { a[".*En_NoConn-.*"] += gsub("(| ).*En_NoConn-.*( |)", "&") }
gawk: cmd. line:3: ^ syntax error
此代码假设是在文件中搜索指定的字符串,然后以以下格式输出结果:
.*Unauthorized.*Dup.*=48
.*En_Conn-.*=0
我在确定问题出在哪里或如何解决问题时遇到了问题。请告知。
答案 0 :(得分:3)
您将独立条件置于脚本的动作部分而不是脚本的条件部分。
好:
composer require annotations
坏:
awk '<condition> { <action> }'
您写道:
awk '{ <condition> { <action> } }`
因此您的条件(awk '{ # <<<< NOTE!!!!
!/simsX.ip-17-31-28-19/ { a[".*Unauthorized.*Dup.*"] += gsub("(| ).*Unauthorized.*Duplication.*( |)", "&") }
!/simsX.ip/ { a[".*En_NoConn-.*"] += gsub("(| ).*En_NoConn-.*( |)", "&")
} # <<<< NOTE!!!
'
和!/simsX.ip-17-31-28-19/
)位于操作块(!/simsX.ip/
)内。您可能打算写:
{...}
或更不可能:
awk '
!/simsX.ip-17-31-28-19/ { a[".*Unauthorized.*Dup.*"] += gsub("(| ).*Unauthorized.*Duplication.*( |)", "&") }
!/simsX.ip/ { a[".*En_NoConn-.*"] += gsub("(| ).*En_NoConn-.*( |)", "&") }
'