William

“尽可能广泛地涉猎各门学问,并且尽可能深入地择一钻研。”
(Try to learn something about everything and everything about something.)--赫胥黎

linux下日志提取总结

在项目上线一段时间后,产品需要知道项目的一些指标,开发的时候如果没有埋点,就只能通过日志进行统计了。所以开发人员也需要了解一些日志提取的方法。

涉及到的知识:linux,shell,正则表达式等

  • ##linux 基本命令

####grep/zgrep grep命令是linux的基本命令,用来提取匹配的文本;zgrep是作用于压缩文件的对应命令; -o 仅提取匹配的文字部分 -c 匹配成功的数目

####sort
sort命令是帮助我们依据不同的数据类型进行排序;sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。 -u 输出中除去重复行

####wc wc命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出。 -l 将每个文件的行数及文件名输出到屏幕上

  • ##正则表达式

      grep -o 'userId=[0-9]\+'
    
  • ##linux管道 管道命令操作符是:”|”,它仅能处理经由前面一个指令传出的正确输出信息,也就是 standard output 的信息,对于 stdandard error 信息没有直接处理能力。然后,传递给下一个命令,作为标准的输入 standard input.

      zgrep 'example' catalina.out.2014-08-13.gz | grep -o 'userId=[0-9]\+' | sort -u | uniq | wc -l
    
  • ##shell 脚本

      #!/bin/bash
      echo "example"
      for i in {3..14}
      do
          if [ $i -lt 10 ];
          then
              zgrep 'example' catalina.out.2014-08-0$i.gz | grep -o 'userId=[0-9]\+' | sort -u | uniq | wc -l
          else
              zgrep 'example' catalina.out.2014-08-$i.gz | grep -o 'userId=[0-9]\+' | sort -u | uniq | wc -l
          fi
      done