1
awk 'BEGIN 
    { 
    INPUTFILE ='XXX'; iterator =0;
    requestIterator =0;
    storageFlag =T;
    printFlag =F;
    currentIteration =F;
    recordCount =1;
       while (getline < "'"$INPUTFILE"'") 
       { 
             requestArray[requestIterator]++; 
             requestIterator++;
       }
     } 
     if ($1 ~ /RequestId/) 
     {  
            FS = "="; 
            if($2 in requestArray) 
            {
                  storage[iterator] =$0;
                  printFlag =T;
                  next
            }
            else 
            {
                  storageFlag =F;
                  next
            }
      }
      else 
      {
           if((storageFlag =='T' && $0 != "EOE"))   
           {
                storage[iterator]=$0; iterator++;
           } 
           else {if(storageFlag == 'F')
           {
                next
           } 
           else
           {
               if(printFlag == 'T')
               {
                    for(details in storage) 
               {
                    print storage[details] >> FILE1;
                    delete storage[details];
               } 
               printFlag =F;
               storageFlag =T;
               next
           }
     }'

上記のコードでいくつかの構文エラーに直面しています。私を助けてください。

awk: BEGIN{INPUTFILE =XXXX;iterator =0;requestIterator =0;storageFlag =T;printFlag =F;currentIteration =F;recordCount =1;while (getline < ""){requestArray[requestIterator]++;requestIterator++;} }if ($1 ~ /RequestId/){FS = "=";if($2 in requestArray){storage[iterator] =$0;printFlag =T;next}else{storageFlag =F;next}}else{if(( storageFlag ==T && $0 != EOE)){storage[iterator]=$0;iterator++;}else{if(storageFlag == F){next}else{if(printFlag == T){for(ストレージの詳細) {print storage[details] >> XXXX;delete storage[details];}printFlag = F;storageFlag =T;next}}}}

awk: ^ 構文エラー

awk: ^ 構文エラー

4

1 に答える 1

1

引用符が問題です。最初の一重引用符INPUTFILE ='XXX'は、BEGIN の前のものと一致するものとして解析され、それ以降はすべての解析が中断されます。

引用符をエスケープするか、awk ファイルを「インライン」ではなく別のファイルに入れます。

# STARTING POINT - known bad
awk 'BEGIN { INPUTFILE ='XXX'; iterator =0; ... '

外側のペア内の単一引用符をすべて削除するように書き直す必要があります

 awk 'BEGIN { INPUTFILE ="XXX"; iterator =0; ... '

または、ダブルスまたはシングルスが必要かどうかに応じて、外側でダブルスを使用し、内側でシングルスを使用します

awk "BEGIN { INPUTFILE ='XXX'; iterator =0; ... '

または、一重引用符をエスケープして、awk に到達し、シェルによって消費されないようにします。

awk 'BEGIN { INPUTFILE =\'XXX\'; iterator =0; ... '

awk スクリプトをシェルにインライン化するのではなく、別のファイルに入れると、すべての問題が解消されます。あなたは好きな引用符を持つことができ、誰も気にしません!!

于 2012-06-26T06:12:43.830 に答える