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(存储细节) {打印存储[详细] >> XXXX;删除存储[详细];}printFlag = F;storageFlag =T;下一个}}}}

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 并且不会被 shell 消耗。

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

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

于 2012-06-26T06:12:43.830 回答