(如果接入了ELK,这part了解)**
1.查询关键字出现的字数
grep ‘要检索的关键字’ 日志文件 | wc -l
2.查询关键字的上下文,上下几行
grep -C n ‘要检索的关键字’ 日志文件
n是上下的行数
例如:检索关键字的上下6行
grep -C 6 ‘关键字’ 日志文件
3.关键字的前几行(before)
grep -B n ‘要检索的关键字’ 日志文件
4.关键字的后几行(after)
grep -A n '要检索的关键字' 日志文件
5.查看实时日志文件
cat 日志文件 | tail -f
6.tail和head的详解
tail 是指定行数到尾行
例如:查看最后100行
cat 日志文件 | tail -100
head是从开头到指定行数
例如:查看文件开始100行
cat 日志文件 | head -100
sed命令查看指定行数
sed -n ‘开始行数,结束行数p’ 文件名
7.查询某个时间段的日志
cat xxx.log | sed -n ‘/2021-10-10 20:11/,/2020-08-19 23:15/p’
8.按照分钟查看
grep ‘2019-03-02 11:4[1-2]’ xxx.log
解释方括号内的时间范围可以更改
面试题来喽
1.统计⽂件中出现次数最多的前10个单词
sort a.txt | uniq -c | sort -k 1 | sort -r |head -10
解释:
第一步:sort a.txt ——》》》》第一步把a文件排序,
第二步:uniq -c, ——》》》》 统计次数
第三步: sort -k 1,——》》》》按照栏1 排序(第一栏现在是统计的次数)
第四步 sort -r,——》》》》倒序
第五步 取前十行
为什么需要倒顺序呢,因为uniq -c,统计完的数据是从小到大排序的
如图所示:
二.文件去重,以及awk的实战经验1.两个非常相似文件,需要找出不同。
比如,在测试环境改了代码。测试过程需要对比测试环境和线上真实环境的文件
1.1简单对比不同,中心思想是【合并两个文件,进行排序,挑选出唯一的数据】需要使用sort将两个文件进行排序,uniq挑选唯一数据。
sort demo1.txt demo2.txt | uniq -d
uniq -d:重复项 (repeated)
uniq -n:仅出现一次的 (unique)
sort -m demo1.txt demo2.txt > merge.txt(这个命令可以合并两个文件到 新的文件中)
1.2需要准确知道哪个文件的哪一行和另外一个文件不同
标记出哪个文件的哪一行 和另一个文件不一致。中心思想,把两个文件合并成一个,每个文件多出一列用来标识它们的行数。通过行数来区分是哪一个文件
awk '{print NR , $0}' demo.txt demo1.txt | sort -k2 | uniq -d -f 1
解释:awk这段的意思 就是在每个文件第一栏标记文件的行数
1.3 awk应用场景
1.3.1需要准确分割日志文件的某一列
awk -F ‘分隔符’ ‘{print $1}’
解释:-F 后边是按照什么分割,print $n 的意思是打印 以分隔符 分割的第几位
1.3.2 需要精准分割 提取日志文件
awk -F '分隔符 ’ ‘{split($1,a,“,”); split($2,b,“,”); print a[1],b[24]}’
awk -F ‘|’ ‘{print $9"?"$10}’ | sed “s#\#g” > xx.log



