IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

awk之exit

PHPor 的Blog 2015-04-08 14:22:16 累计浏览 3,806 次
本机暂存

题目

   有100个日志文件,每个文件大约1G,每条日志都以 “H:i:s” 的时间格式开头,如:

05:02:04 xxx yyy zzz

   因为是日志文件,所以肯定以时间为顺序的,现在可以确定的是,在某个文件中存在一条 01:02:03 这个时间点的关于xxx的日志,要找出来 ,如何做?

办法1:

# for f in *; do awk '/^01:02:03/{}' $f |grep xxx; done

   虽然我们的正则是只匹配行首,算是很快的了,但是,我们还是扫描了整个的100个文件;考虑到每个文件肯定都是有时间顺序的,我们做了大量的无用的工作,其实完全可以提前退出的,加入每10分钟都会有日志出现,则可以优化如下:

办法2:

# for f in *; do awk '/^01:02:03/{} /^01:1/{exit}' $f |grep xxx; done

   这样的话,没个文件只扫描很少的一部分就可以了

办法3:

   该题的sed解法:

# for f in *; do sed -n '/^01:02:03/p; /^01:1/q}' $f |grep xxx; done

办法4:

   当然,将 xxx 并入正在表达式也是可以的(只是没有上面看起来更一目了然):

# for f in *; do sed -n '/^01:02:03.xxx/p; /^01:1/q}' $f ; done

同分类推荐文章

  1. 从零重建 macOS 开发机:可复现的环境初始化流程 (2026-06-14 20:36:00)
  2. 百度物理网络监控工具开源第二弹:毫秒级监控工具 baize,让你的网络问题无处遁形 (2026-06-11 08:10:28)
  3. How to Set Up Homebrew Tap for Private CLI Tools: A Complete Guide (2026-05-27 02:13:03)

查看更多 DevOps 文章 →

建议继续学习

  1. 28个Unix/Linux的命令行神器 (累计阅读 16,791)
  2. 调试工具之GDB (累计阅读 14,832)
  3. 强制刷新本地 DNS 缓存记录 (累计阅读 10,918)
  4. Linux date 命令获取某日期的前一天 (累计阅读 9,882)
  5. ps 命令常见用法 (累计阅读 9,504)
  6. linux下搜索find命令详解 (累计阅读 9,463)
  7. AWK 简明教程 (累计阅读 9,367)
  8. Bash 小技巧:给目录加上书签,快速切换目录 (累计阅读 8,089)
  9. awk命令,实现文件的合并与拆分 (累计阅读 7,063)
  10. AWK介绍 (累计阅读 6,709)