awk检查文件中的多个模式

时间:2019-02-10 23:08:00

标签: awk

这是我的代码:

/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

我在确定问题出在哪里或如何解决问题时遇到了问题。请告知。

1 个答案:

答案 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-.*( |)", "&") }        
'