1

次の中括弧が必要と思われる次の awk スクリプトがあります。しかし、これは awk では許可されていません。ここのスクリプトでこの問題を修正するにはどうすればよいですか?

問題は if(inqueued == 1) にあります。

BEGIN { 
   print "Log File Analysis Sequencing for " + FILENAME;
   inqueued=0;
   connidtext="";
   thisdntext="";
}

    /message EventQueued/ { 
     inqueued=1;
         print $0; 
    }

     if(inqueued == 1) {
          /AttributeConnID/ { connidtext = $0; }
          /AttributeThisDN / { thisdntext = $2; } #space removes DNRole
     }

    #if first chars are a timetamp we know we are out of queued text
     /\@?[0-9]+:[0-9}+:[0-9]+/ 
     {
     if(thisdntext != 0) {
         print connidtext;
             print thisdntext;
         }
       inqueued = 0; connidtext=""; thisdntext=""; 
     }
4

2 に答える 2

2

変えようとする

  if(inqueued == 1) {
              /AttributeConnID/ { connidtext = $0; }
              /AttributeThisDN / { thisdntext = $2; } #space removes DNRole
         }

 inqueued == 1 {
             if($0~ /AttributeConnID/) { connidtext = $0; }
              if($0~/AttributeThisDN /) { thisdntext = $2; } #space removes DNRole
         }

また

 inqueued == 1 && /AttributeConnID/{connidtext = $0;}
 inqueued == 1 && /AttributeThisDN /{ thisdntext = $2; } #space removes DNRole
于 2012-11-16T11:44:14.407 に答える
0

awk は<condition> { <action> }セグメントで構成されています。an 内では、C でorコンストラクトを使用<action>して行うのと同じように、条件を指定できます。他にもいくつか問題があります。スクリプトを次のように書き直してください。ifwhile

BEGIN { 
   print "Log File Analysis Sequencing for", FILENAME
}

/message EventQueued/ { 
    inqueued=1
    print 
}

inqueued == 1 {
    if (/AttributeConnID/) { connidtext = $0 }
    if (/AttributeThisDN/) { thisdntext = $2 } #space removes DNRole
}

#if first chars are a timetamp we know we are out of queued text
/\@?[0-9]+:[0-9}+:[0-9]+/ {
     if (thisdntext != 0) {
         print connidtext
         print thisdntext
     }
     inqueued=connidtext=thisdntext="" 
}

それがあなたの望むことをするかどうかはわかりませんが、少なくとも構文的には正しいです。

于 2012-11-16T12:42:52.120 に答える