【刷题】面筋-linux统计文件中字符串次数及文件夹下特定类型文件个数 法1:grep+wc 法2:awk 其他

单个字符串

  • 语法:grep -o targetStr filename | wc -l

    • grep输出,wc -l按行统计,
    • 不加参数-o:每行重复只统计一个;
    • 加参数-o:一条数据里面有多个相同,会统计相同的次数
    • 注:单个字符串,字符串部分可以不加引号
  • 示例:

    • 如:统计task-hbase-transform.log中NullPointerException出现的次数
    • grep NullPointerException task-hbase-transform.log|wc -l

多个字符串

  • 语法:grep -o targetStr_1|targetStr_2|targetStr_3…… filename | wc -l
    • 与单个字符串的区别:用"|"连接多个字符串,其他相同。
    • 注:必须加引号(单、双都可以),不加引号结果不正确。

参数-o

  • grep -o:一条数据里面有多个相同,会统计相同的次数
  • grep:一条数据里面有多个相同,会统计一次次数

法2:awk

语法1:

  • awk -v RS="@#$j" '{print gsub(/targetStr/,"&")}' filename

语法2:

  • awk '{s+=gsub(/targetStr/,"&")}END{print s}' filename

两种方法对比

  • 小文件第一种方法最快0.003s,awk最快0.002s,一般都是比前者快
  • 当文件大的时候awk优势会更加明显

===========================================

其他

统计多个文件

  • 统计/logs/task-hbase-transform/路径下,每个文件中Exception关键字出现的次数,

  • 脚本统计:vim countex.sh 加入以下


#!bin/sh
for file in /logs/task-hbase-transform/* #日志文件路径
do
    if test -f $file #如果是文件,统计异常数量,并输出到ex.log
    then
         e=`grep Exception "$file"|wc -l` #按行统计并输出
         echo "Exception--"$file"--"$e >>ex.log #把统计内容输出到ex.log中
        #echo $file 是文件   >> c.log
    else
        echo $file 是目录
    fi
done
  • 添加执行权限:chmod +x countex.sh

  • 执行脚本:sh countex.sh

  • 查看统计结果:cat ex.log

统计文件夹下特定类型文件个数

  • 统计文件夹下/mount/taskdata 以.log结尾的文件数量

  • find /mount/taskdata -name *.log |wc -l #find查找特定类型并统计

  • 或者

  • ls /mount/taskdata/*.log |wc -l #ls列出特定类型并统计

  • 文件内查找用grep,查找文件用find

参考链接

END