根据日志文件logid提取同一组的日志

源日志:

2023-09-21 06:52:50.251 [http-nio-18110-exec-3] [rys95gq55073g9x] [INFO ] EmployeeService [502] – 111test
2023-09-21 06:52:50.251 [http-nio-18110-exec-3] [rys95gq55073g9x] [INFO ] EmployeeService [502] – 222test
2023-09-21 06:55:37.272 [http-nio-18110-exec-12] [rys95gq55073g9x] [INFO ] EmployeeService [502] – 333test

grep "test" a.log | awk -F "[" '{print $3}' | cut -d "]" -f1 | while read -r logId; do grep "$logId" s.log; done

 

echo "2023-09-21 06:52:50.251 [http-nio-18110-exec-3] [rys95gq55073g9x] [INFO ] EmployeeService [502] - 111test" | awk -F '[][]' '{print $4}'

awk -F '[][]' 中的 -F 参数用于指定字段分隔符。在这里,我们使用了方括号 [] 作为分隔符,但由于方括号在正则表达式中有特殊意义,因此我们将它们用单引号括起来,以确保它们被视为普通字符。

具体解释如下:

  • -F '[][]': 这部分代码设置了字段分隔符 -F 为正则表达式 '[][]',其中方括号 [] 包含了两个字符,表示 awk 应该将这两个字符作为字段分隔符。在正则表达式中,方括号 [] 用于表示字符集,而这里我们只是简单地指定了两个字符,即左括号 [ 和右括号 ],用来作为字段分隔符。

因此,awk 在处理文本时会将方括号内的字符 [] 视为字段分隔符,这样我们就可以使用 $4 来访问第 4 个字段,其中包含了 rys95gq55073g9x。这是一种非常有用的方式来处理包含特殊字符的文本数据。

 

shell再脚本文件中的应用:

#!/bin/bash

# 设置日志文件目录路径
log_dir="/tmp/info"

# 获取2023-09-19的时间戳
start_timestamp=$(date -d "2023-09-19" +%s)

# 循环遍历日志文件
for log_file in $(find $log_dir -name "a.log" -newermt "2023-09-19"); do

        echo "处理日志文件:$log_file"
	grep "test" $log_file | awk -F "[" '{print $3}' | cut -d "]" -f1 | while read -r logId; do grep "$logId" $log_file; done

done

 

 

发表评论

邮箱地址不会被公开。