IT技术博客大学习 共学习 共进步

awk之exit

PHPor 的Blog 2015-04-08 14:22:16 浏览 3,683 次

题目

   有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. Linux命令行里的“瑞士军刀” (阅读 11,443)
  2. AWK 简明教程 (阅读 9,143)
  3. awk命令,实现文件的合并与拆分 (阅读 6,963)
  4. AWK介绍 (阅读 6,581)
  5. 更快的IP库查找方法以及AWK中的二分查找 (阅读 6,401)
  6. awk 实例之二维数组 (阅读 5,923)
  7. 操作大文本,awk vs vim (阅读 4,962)
  8. SED命令行脚本快速参考,AWK命令行脚本快速参考,perl命令行脚本快速参考 (阅读 4,745)
  9. 从shell中向awk传递变量实例 (阅读 4,482)
  10. bash shell - sed及awk文本捕获及替换 (阅读 4,203)