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
SPLREQUEST
表示请求的开始,SPLEND
表示请求的终了。同一个请求的SPLREQUEST和SPLEND的线程号相同。20231126-2.log
110120 SPLREQUEST 内容1 AAA memberID=1 eventController=event1
110120 SPLEND ExecTime=200 ResultCode=200
123456 SPLEND ExecTime=300 ResultCode=200
123456 SPLREQUEST 内容2 BBB memberID=2 eventController=event2
123444 SPLREQUEST 内容3 CCC memberID=3 eventController=
123434 SPLREQUEST 内容4 DDD memberID= eventController=event4
123444 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=event6
674545 SPLEND ExecTime=400 ResultCode=200
⏹将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
⏹由于请求开始和请求终了日志的线程号都是相同的,且都在第一列,因此可以通过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
⏹抽取出线程号,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
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