【刷题】面筋-linux统计文件中字符串次数及文件夹下特定类型文件个数
法1:grep+wc
单个字符串
-
语法:
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