在 awk 脚本中的搜索模式中使用变量

发布于 2024-10-04 03:45:43 字数 628 浏览 2 评论 0原文

#!/usr/local/bin/gawk -f  `

{  
awkvar2="/id=22/";  
awkvar3="/end/";  


if ($0 ~ awkvar2) {  
    triggered=1;  
  }  
  if (triggered) {  
     print;  
     if ($0 ~ awkvar3) {  
        triggered=0;  
        print "\n-----------------------------------------------\n"  
     }  
  }  
}  

这个 awk 脚本不适合我 我正在尝试从一行搜索到另一行,即 id=22 直到 end (我不使用 //,// 的原因是因为我想在每个搜索块之后有一个大行) 我希望仅使用变量。
我可以直接使用模式 if ($0 ~ /end/) { 但我不想这样做,我想使用搜索模式内的变量 (原因是我将通过 shell 动态获取变量中的值)

请告诉我如何在 awk 的搜索模式中使用变量

,谢谢...

#!/usr/local/bin/gawk -f  `

{  
awkvar2="/id=22/";  
awkvar3="/end/";  


if ($0 ~ awkvar2) {  
    triggered=1;  
  }  
  if (triggered) {  
     print;  
     if ($0 ~ awkvar3) {  
        triggered=0;  
        print "\n-----------------------------------------------\n"  
     }  
  }  
}  

this awk script is not working for me
i am trying to search from one line to another i.e id=22 till end
(the reason i am not using /<string>/,/<string>/ is because i want a big line after each block of search)
and i want this using variables only.
i could directly use the patterns if ($0 ~ /end/) {
but i dont want to do that, i want to use the variables inside the search pattern
(reason is i will be getting the values in the variables dynamically thorough the shell)

please advise me how to use variables inside the search pattern for awk

thanks...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

っ左 2024-10-11 03:45:44
{
awkvar2="id=22";
awkvar3="end"; 
if ($0 ~ awkvar2) {
        triggered=1;
         }
if (triggered) {
         print;
         if ($0 ~ awkvar3) {
              triggered=0;
              print "\n-----------------------------------------------\n"
         }
}
} 

编辑

根据请求修改以打印“id=22”之前的行

{
  awkvar2="id=22";
  awkvar3="end"; 
  if ($0 ~ awkvar2) {
          print prev;
          triggered=1;
  }
  if (triggered) {
          print;
          if ($0 ~ awkvar3) {
              triggered=0;
              print "\n-----------------------------------------------\n"
          }
  }
  {prev=$0;}
}  

或者,更多笨拙

BEGIN {awkvar2="id=22";awkvar3="end"}

($0 ~ awkvar2),($0 ~ awkvar3) { if ($0 ~ awkvar2) {print prev;}
                                print; 
                                if ($0 ~ awkvar3) {
                                    print "\n---------------\n"
                                }
                               }
{prev=$0;}
{
awkvar2="id=22";
awkvar3="end"; 
if ($0 ~ awkvar2) {
        triggered=1;
         }
if (triggered) {
         print;
         if ($0 ~ awkvar3) {
              triggered=0;
              print "\n-----------------------------------------------\n"
         }
}
} 

Edit

Modified per request to print the line before "id=22"

{
  awkvar2="id=22";
  awkvar3="end"; 
  if ($0 ~ awkvar2) {
          print prev;
          triggered=1;
  }
  if (triggered) {
          print;
          if ($0 ~ awkvar3) {
              triggered=0;
              print "\n-----------------------------------------------\n"
          }
  }
  {prev=$0;}
}  

Or, more awkish

BEGIN {awkvar2="id=22";awkvar3="end"}

($0 ~ awkvar2),($0 ~ awkvar3) { if ($0 ~ awkvar2) {print prev;}
                                print; 
                                if ($0 ~ awkvar3) {
                                    print "\n---------------\n"
                                }
                               }
{prev=$0;}
凑诗 2024-10-11 03:45:44

belisarius awk 脚本的更紧凑版本,没有“if”

BEGIN {awkvar2="id=22";awkvar3="end"}

($0 ~ awkvar2) {print prev;}
($0 ~ awkvar2),($0 ~ awkvar3) {print; }
($0 ~ awkvar3) {print "\n---------------\n"}
               {prev=$0;}

More compact version of belisarius awk script, without 'if's

BEGIN {awkvar2="id=22";awkvar3="end"}

($0 ~ awkvar2) {print prev;}
($0 ~ awkvar2),($0 ~ awkvar3) {print; }
($0 ~ awkvar3) {print "\n---------------\n"}
               {prev=$0;}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文