Linux命令实战日志操作

在我们的日常开发中,经常需要对日志进行查询、排序、聚合等操作来拿到我们想要的数据。下面通过一些实际遇到的例子来学习Linux中的awk、grep、sort、uniq、tail、cat、less等命令的使用。

案例一:如何在日志中查询包含某些关键词的信息

cat or tail + grep

1.1 最基本的使用

为在app.log文件中查询包含关键词keyword的行

cat app.log | grep "keyword"

如果是一个还在滚动增长的日志,要在最新的内容搜索,可以把cat命令替换为tail -f。下面的同理,不在重复说明了。

tail -f app.log | grep "keyword"
1.2 查询包含keyword1 或者keyword2的行
cat app.log | grep "key1\|key2"

多个关键词之间使用|隔开

1.3 排除包含key3的行
cat app.log | grep -v "key3"
1.4 排除包含key3、key4的行
cat app.log | grep -v "key3" | grep -v "key4"

是的可以链式使用同一命令。

1.5 搜索包含key1或者key2且不包含key3的行
cat app.log | grep "key1/|key2" | grep -v "key3"
1.6 输出满足条件的前100条数据

如果搜索结果太多,看不过来怎么办?可以只输出前n条满足条件的行。

cat app.log | grep "key1" -m 100
1.7 输出满足条件的行的前、后n行

输出包含key1的行,和它前10行输出

cat app.log | grep "key1" -B 10

输出包含key1的行,和它后10行输出

cat app.log | grep "key1" -A 10

输出包含key1的行,和它前后10行输出

cat app.log | grep "key1" -C 10

案例二:将一行数据分割后进行查询

在 很多情况下,一行日志中包含很多信息,这些信息以空格或其他符号分隔开。这就需要我们进行分割后处理。使用强大的awk命令可以完成这种操作。

假设日志格式如下:
即每行数据包含3个字段:编号、url、IP地址,字段之间使用空格隔开

000001 baidu.com/hello.html 123.1.1.1
000002 baidu.com/world.html 124.1.1.1
2.1 输出分割之后的第n项

输出第一项:

cat app.log | awk -F ' ' '{print $1}'

输出最后一项:

cat app.log | awk -F ' ' '{print $NF}'

标号从1开始,也可以使用NF表示最后一项。

2.2 如果url中包含hello.html则输出整行
cat test.log | awk -F ' ' '{if(match($2,"hello")>0){print $0}}'

使用match方法进行匹配,并且之前说了分割后从1开始计数,第0项就表示整行数据,这里也可以根据需要选择输出哪一项数据。

案例三.统计access日志中访问量最大的10个IP

cat access.log | grep "list.shtml" | awk -F ' ' '{print $NF}' | sort | uniq -c | sort -k 1 -nr | head -10

命令解释:
grep、awk就不用说了(这里access的最后一项是IP)

sort:排序
uniq -c : 将相邻的、重复项合并并计数
sort -k 1 -nr : -k 1表示按第1项排序(计数值),-n表示按数字排序,加上个r表示你需

案例四.遍历分隔项,输出满足条件的

cat access.log2021-12-13 | grep "info.shtml" -m 1000 | awk -F '&' '{for(i=1;i<=NF;i++){if(!match($i,"id=")) print $0}}' 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值