复制 grep "my pattern" myfile.log |排序 |优克 |wC语言 l in awk



如果我在目标文件上执行此 grep,结果是 275

但是我想学习awk,所以在awk中尝试了这个:

 awk 'BEGIN { count=0 } /my pattern/ { count++ } END { print count }' myfile.log

这将按预期打印 275。

因此,雄心勃勃的我创建了一个这样的awk脚本:

BEGIN { 
   print "Log File Analysis";
   message=0;
   events=0;
}
{
  /message/  {  messages++;  }
  /event/    { events++;  }
}
END { 
  print "messages:t" messages;
  print "events:t" events;
}

我收到语法错误,

$ awk -f test_learn.awk test_log.log
awk: test_learn.awk:16:   /message/  {  messages++;  }
awk: test_learn.awk:16:              ^ syntax error

我做错了什么?

我在Windows 7上使用来自MinGW shell的awk。

试试

 awk 'BEGIN { count=0 }; /my pattern/{count++ }; END { print count }' myfile.log

awk 'BEGIN { count=0};  { if ($0 ~ /my pattern/)  count++ }; END { print count };' myfile.log

更好的是,由于变量默认初始化为零,因此不需要 BEGIN 块,因此

awk '/my pattern/{count++ }; END { print count };' myfile.log

您可以将默认循环应用于文件中的所有行,如 if 的 2d 示例所示,或者您可以有多个块,按模式"过滤",如上所述,并在您编辑的添加中。

当做单行时,有些尴尬需要分号将 BEGIN 和 END 块与主循环块分开。

编辑

与您的第二期相同的想法,并整合了埃德莫顿的改进(谢谢)

/message/  {  messages++  }
/event/    { events++  }
END { 
 print "Log File Analysis"
 print "messages:t" messages
  print "events:t" events
}

希斯

最新更新