昨天被要求写一个shell脚本 用来匹配日志中符合条件的sql的数量,新建了一个test.sh,内容如下
#!/usr/bin/env bash
grep -o "$1" "$2" | wc -l
第一个参数为被匹配的字符串
第二个参数为文件
我是windows 运行用的git bash
新建1.txt
内容如下
哈哈哈
1
2
3
4
5
6
哈哈哈哈1223
11
22
33
44
55
66
77
运行结果如图
之后要求要显示匹配的内容和行数以及以下几行的内容
修改一下脚本
#!/usr/bin/env bash
grep -o "$1" "$2" | wc -l
grep -n -A "$3" "$1" "$2"
第三个参数为 查看匹配内容下面的行数
之后尝试了一下awk
#!/usr/bin/env bash
awk -v RS="@#$j" '{print "匹配次数:",gsub(/'"$1"'/,"&"),"\n" }' "$2"
awk '/'"$1"'/{ {print NR,"\t",$0} for(i=1;i<='"$3"';i++) {getline; print NR,"\t",$0} {print "\n"} } ' "$2"
结果如下
追求运行效率的话最快的应该是 riggrep 底层用的Rust支持
应该要比grep快亿点
有兴趣的话大家尝试一下