file1.log
123 aaa 你好
345 bbb 我好
345 ccc 大家好
124 ddd 世界好
111 rrr 哈哈哈
file2.log
123 mmm 你好mmm
366 nnn 我好nnn
377 fff 大家好fff
124 uuu 世界好uuu
111 iii 哈哈哈iii
分析
两个文本文件格式相同,都是3列,第一例都是数字编号。可以通过打开这两个文件然后获取出开头列,然后排序之后再去重。
转换为linux命令之后就是
-o
配置项只输出匹配到的内容^\S*
匹配开头不为空的内容sort
用来排序uniq
用来去重cat file1.log file2.log | egrep -o -a "^\S*" | sort | uniq
111
123
124
345
366
377
如果我们想查看每个数字编码出现的次数的话,给uniq
命令加上-c
配置项即可。
其中第一列是数字编码出现的次数。
cat file1.log file2.log | egrep -o -a "^\S*" | sort | uniq -c
2 111
1 123
2 124
2 345
1 366
1 377
有如下日志file4.log
2323 SEQIN mmm isuuePayId=5768awe uuid=woenoo; jmw_state=success method=paypay info=ppp
2323 SEQOUT COST=45726
2345 SEQIN mmm isuuePayId=34895ry uuid=;ljkler jmw_state=faile method=alipay info=ddd
2345 SEQOUT COST=34855
需求,抽取出SEQIN类日志中的第一个字段,isuuePayId 和 jmw_state 字段,让其在一行显示
⏹第一步,抽取SEQIN类日志,去除掉 SEQOUT 日志
grep -a "SEQIN" file4.log
2323 SEQIN mmm isuuePayId=5768awe uuid=woenoo; jmw_state=success method=paypay info=ppp
2345 SEQIN mmm isuuePayId=34895ry uuid=;ljkler jmw_state=faile method=alipay info=ddd
⏹第二步,获取出SEQIN类日志中的第一个字段,isuuePayId 和 jmw_state 字段
grep -a "SEQIN" file4.log | egrep -o -a -e "^\S*" -e "isuuePayId=\S*" -e "jmw_state=\S*"
2323
isuuePayId=5768awe
jmw_state=success
2345
isuuePayId=34895ry
jmw_state=faile
⏹第三步,让isuuePayId和jmw_state到一行上显示
grep -a "SEQIN" file4.log
# 进一步过滤
| egrep -o -a -e "^\S*" -e "isuuePayId=\S*" -e "jmw_state=\S*"
# 替换指定字段的换行符
| sed ':loop; N; $!b loop; ;s/\n\([ij]\)/ \1/g'
2323 isuuePayId=5768awe jmw_state=success
2345 isuuePayId=34895ry jmw_state=faile
⏹查询发生的件数版本1
c1A03a,c1Ae*a,c1Be*a
都是服务器的名称grep -ae "\[ERROR\]" -ae "Exception" /logback/{c1A03a,c1Ae*a,c1Be*a}/tomcat/current/logs/
spl/.20240331*mpl*app.log | wc -l
⏹查询发生的件数版本2
grep -ae "\[ERROR\]" -ae "Exception" /logback/{c1A03a,c1Ae*a,c1Be*a}/tomcat/current/logs/
spl/.20240331*mpl*app.log | grep -a 09:0[5-9]:[0-5][0-9] | egrep -o "^\S*" | sort
| uniq -c | wc -l
⏹查询发生异常的服务器名称
awk '{print $1}'
是因为排序之后去重之后,获取到的内容之前会加上一个数字,用来表示当前行的重复数量awk '{print $1}'
处理,数据的大致样式如下 1 /logback/c1Ae01a/tomcat/current/logs/spl/.2024033109mpl_test1_app.log:03210429-47789
5 /logback/c1Ae12a/tomcat/current/logs/spl/.2024033109mpl_test2_app.log:03210154-24389
3 /logback/c1Be07a/tomcat/current/logs/spl/.2024033109mpl_bis01_app.log:06334561-95267
grep -ae "\[ERROR\]" -ae "Exception" /logback/{c1A03a,c1Ae*a,c1Be*a}/tomcat/current/logs/
spl/.20240331*mpl*app.log | grep -a 09:0[5-9]:[0-5][0-9] | egrep -o "^\S*" | sort
| uniq -c | awk '{print $1}' > result.log
⏹result.log的内容如下
:
之前的部分是日志所在的路径,从路径中可以找出服务器的名称:
之后的部分是请求的线程号,通过该线程号可以详细的抽出日志/logback/c1Ae01a/tomcat/current/logs/spl/.2024033109mpl_test1_app.log:03210429-47789
/logback/c1Ae12a/tomcat/current/logs/spl/.2024033109mpl_test2_app.log:03210154-24389
/logback/c1Be07a/tomcat/current/logs/spl/.2024033109mpl_bis01_app.log:06334561-95267
⏹sftp_data.csv
AAA,222,333,20240604,20
AAA,222,333,20240604,10
BBB,444PPP,555SS,20240605,20
BBB,444,555SS,20240610,20
CCC,555,666SS,20240605,10
CCC,666,666SS,20240603,20
需要从上面的csv文件中抽取
20240601~20240605
的数据20
的数据⏹grep "^.*,.*,.*,2024060[1-5],20" sftp_data.csv
fengyehong@ubuntu:~/jmw_work_space/20270720$ grep "^.*,.*,.*,2024060[1-5],20" sftp_data.csv
AAA,222,333,20240604,20
BBB,444PPP,555SS,20240605,20
CCC,666,666SS,20240603,20
cat file3.txt | grep -v ^# | grep -v ^$