Linux服务器配置和管理:Shell编程查找关键字个数-查找相邻行数

1 假设有一个log文件http.txt,每行包含http返回码,找到返回码200的个数。

首先考虑每行最多出现一个200的情况

$ cat http.txt 
return 100
return 100
return 200
return 100
return 100
return 100
return 100	200
return 100 300 400

# 直接用grep就可以查出来
$ grep 200 http.txt -c #统计行数即可
2

如果每行可能多个200呢?

$ grep '\<200\>' http.txt
return 200
return 100	200	200

grep无能为力了,我们应该编写shell脚本计算

$ cat ct200.sh 
#!/bin/bash
count=0
for i in `cat http.txt` # for是以 任何空白字符 作为分隔符
do
	# 也可写成 "$i" = "200"
		if [ $i = 200 ];then
				let count+=1
		fi
done
echo $count

运行如下

$ bash ct200.sh
3

2 文本中有多行数据,每一行可能有keyword,找出包含keyword的连续两行行号

假设内容如下

fsj@ubuntu:~/tmp$ cat meitu.txt 
abc
66 kw
kw 4
d x
gdas
dsafd
ddd34
qq2

dtttt
kw3 kw kw
666666666666

kw
kw
theend

grep可以查到包含关键字kw的行

fsj@ubuntu:~/tmp$ grep kw meitu.txt -n
2:66 kw
3:kw 4
11:kw3 kw kw
14:kw
15:kw

如何查找连续两行行号? 同样要编写脚本ctrow.sh,判断上一个kw所在行和当前kw所在行是否相差1

#!/bin/bash
pre=-100 # 上一个行号
for i in `grep kw meitu.txt -n | awk -F: '{print $1}'`
do
	if [ $((pre+1)) -eq $i ]; then
			echo $i
	fi
	pre=$i
done

运行下:

fsj@ubuntu:~/tmp$ bash ctrow.sh 
3
15

References

  • 王军. linux系统命令及shell脚本实践指南

转载于:https://my.oschina.net/SnifferApache/blog/755641

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值