目录
- 一. 去除单个指定文本的换行符
- 二. 去除多个指定文本的换行符
- 三. 抽取出指定数据
- 3.1 分别抽取SPLREQUEST和SPLEND的数据
- 3.2 通过join命令将文件合并
- 3.3 抽取出指定的数据
- 3.4 去除换行符,整合数据为一行
一. 去除单个指定文本的换行符
👉 info.txt
Some text before
2023 Some text after
Another 2023 line with 2023
20232023A line with consecutive 2023
Last line 2023
⏹解析
:loop; N; $!b loop;
用于循环整个文件s/\n2023/ 2023/g
用于替换,将换行符2023
替换为空格2023
cat info.txt | sed ':loop; N; $!b loop; s/\n2023/ 2023/g'
💪效果
Some text before 2023 Some text after
Another 2023 line with 2023 20232023A line with consecutive 2023
Last line 2023
二. 去除多个指定文本的换行符
👉 a.txt
Start 2023-11-05 05:15:10
eventController=enent1
MemberId=uuidw3e
ExecTime=1000
Start 2023-11-05 05:17:10
eventController=enent2
MemberId=uuidA234
ExecTime=2000
⏹解析
s/\n\([eME]\)/ \1/g
用于将 换行符e开头的数据,换行符M开头,换行符E开头的数据的换行符去掉,并添加一个空格。
cat ./a.txt | sed ':loop; N; $!b loop; s/\n\([eME]\)/ \1/g'
💪效果
Start 2023-11-05 05:15:10 eventController=enent1 MemberId=uuidw3e ExecTime=1000
Start 2023-11-05 05:17:10 eventController=enent2 MemberId=uuidA234 ExecTime=2000
三. 抽取出指定数据
如下所示,程序运行后生成了如下log
- 开头的数字(110120,123456等)代表了线程号
SPLREQUEST
表示请求的开始,SPLEND
表示请求的终了。同一个请求的SPLREQUEST和SPLEND的线程号相同。- 因为系统上线运行后,同一时刻可能会存在多个并发请求,所以同一个请求在同一个时刻打印的log可能分布在日志文件的不同的地方。
- 我们可以根据线程号将同一个请求的SPLREQUEST和SPLEND相关的数据聚合到同一行,然后进行处理。
👉 20231126-2.log
110120 SPLREQUEST 内容1 AAA memberID=1 eventController=event1
110120 SPLEND ExecTime=200 ResultCode=200
123456 SPLEND ExecTime=300 ResultCode=200123456 SPLREQUEST 内容2 BBB memberID=2 eventController=event2
123444 SPLREQUEST 内容3 CCC memberID=3 eventController=
123434 SPLREQUEST 内容4 DDD memberID= eventController=event4123444 SPLEND ExecTime=200 ResultCode=200
123434 SPLEND ExecTime=400 ResultCode=200
345345 SPLEND ExecTime=500 ResultCode=200
345345 SPLREQUEST 内容5 EEE memberID=5 eventController=event5
674545 SPLREQUEST 内容6 FFF memberID=6 eventController=event6674545 SPLEND ExecTime=400 ResultCode=200
3.1 分别抽取SPLREQUEST和SPLEND的数据
- 在日志文件中,请求开始的日志和请求结束的日志所在的位置都是错乱无规律的。
- 我们可以先将请求开始相关的数据抽取到一个文件中
- 再将请求终了的相关的数据抽取到一个文件中
- 再将上述得到的两个文件合并
⏹将SPLREQUEST
相关的数据抽取到文件中
grep SPLREQUEST ./20231126-2.log > SPLREQUEST.txt
SPLREQUEST.txt
110120 SPLREQUEST 内容1 AAA memberID=1 eventController=event1
123456 SPLREQUEST 内容2 BBB memberID=2 eventController=event2
123444 SPLREQUEST 内容3 CCC memberID=3 eventController=
123434 SPLREQUEST 内容4 DDD memberID= eventController=event4
345345 SPLREQUEST 内容5 EEE memberID=5 eventController=event5
674545 SPLREQUEST 内容6 FFF memberID=6 eventController=event6
⏹将SPLEND
相关的数据抽取到文件中
grep SPLEND ./20231126-2.log > SPLEND.txt
SPLEND.txt
110120 SPLEND ExecTime=200 ResultCode=200
123456 SPLEND ExecTime=300 ResultCode=200
123444 SPLEND ExecTime=200 ResultCode=200
123434 SPLEND ExecTime=400 ResultCode=200
345345 SPLEND ExecTime=500 ResultCode=200
674545 SPLEND ExecTime=400 ResultCode=200
3.2 通过join命令将文件合并
⏹由于请求开始和请求终了日志的线程号都是相同的,且都在第一列,因此可以通过join命令将两个文件通过线程号连接起来
join SPLREQUEST.txt SPLEND.txt > ALL.txt
ALL.txt
110120 SPLREQUEST 内容1 AAA memberID=1 eventController=event1 SPLEND ExecTime=200 ResultCode=200
123456 SPLREQUEST 内容2 BBB memberID=2 eventController=event2 SPLEND ExecTime=300 ResultCode=200
123444 SPLREQUEST 内容3 CCC memberID=3 eventController= SPLEND ExecTime=200 ResultCode=200
123434 SPLREQUEST 内容4 DDD memberID= eventController=event4 SPLEND ExecTime=400 ResultCode=200
345345 SPLREQUEST 内容5 EEE memberID=5 eventController=event5 SPLEND ExecTime=500 ResultCode=200
674545 SPLREQUEST 内容6 FFF memberID=6 eventController=event6 SPLEND ExecTime=400 ResultCode=200
3.3 抽取出指定的数据
⏹抽取出线程号,memberID,eventController,ExecTime。
-o
表示 只显示匹配到的数据^\S*
表示 非空开头的数据,在此案例中特指线程号
grep -o -a -e "^\S*" -e "eventController=\S*" -e "memberID=\S*" -e "ExecTime=\S*" ALL.txt > pick_data.txt
pick_data.txt
110120
memberID=1
eventController=event1
ExecTime=200
123456
memberID=2
eventController=event2
ExecTime=300
123444
memberID=3
eventController=
ExecTime=200
123434
memberID=
eventController=event4
ExecTime=400
345345
memberID=5
eventController=event5
ExecTime=500
674545
memberID=6
eventController=event6
ExecTime=400
3.4 去除换行符,整合数据为一行
cat pick_data.txt | sed ':loop; N; $!b loop; s/\n\([emE]\)/ \1/g'
110120 memberID=1 eventController=event1 ExecTime=200
123456 memberID=2 eventController=event2 ExecTime=300
123444 memberID=3 eventController= ExecTime=200
123434 memberID= eventController=event4 ExecTime=400
345345 memberID=5 eventController=event5 ExecTime=500
674545 memberID=6 eventController=event6 ExecTime=400