gpt4 book ai didi

awk - 重现 grep "my pattern"myfile.log |排序 |独特 | awk 中的 wc -l

转载 作者:行者123 更新时间:2023-12-02 03:54:08 34 4
gpt4 key购买 nike

如果我对我的目标文件执行此 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 block ,所以

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

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

当您使用单行代码时,一些 awk 要求使用分号将 BEGIN 和 END block 与主循环 block 分开。

编辑

与您的第 2 期相同的想法,并整合了 Ed Morton 的改进(感谢)

/message/  {  messages++  }
/event/ { events++ }

END {
print "Log File Analysis"
print "messages:\t" messages
print "events:\t" events
}

健康教育

关于awk - 重现 grep "my pattern"myfile.log |排序 |独特 | awk 中的 wc -l,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13395971/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com