解析awk块中的错误

时间:2012-06-26 06:06:34

标签: awk

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&lt;“”){requestArray [requestIterator] ++ ; requestIterator ++;}} if($ 1~ / RequestId /){FS =“=”; if(requestArray中为$ 2){storage [iterator] = $ 0; printFlag = T; next} else {storageFlag = F; next}} else {if((storageFlag == T&amp;&amp; $ 0!= EOE)){storage [iterator] = $ 0; iterator ++;} else {if(storageFlag == F){next} else {if(printFlag == T) {for(存储中的详细信息){print storage [details]&gt;&gt; XXXX;删除存储[详细信息];} printFlag = F; storageFlag = T; next}}}}

awk:^语法错误

awk:^语法错误

1 个答案:

答案 0 :(得分: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并且不会被shell消耗。

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

如果将awk脚本放入单独的文件而不是将其内联到shell中,那么所有问题都会消失。你可以拥有自己喜欢的任何报价,没人会关心!!