我有以下格式的日志,我试图从他们的多个字段grep。
2020-09-23 INFO [http-nio-8080-exec-428] localhost.com CLIENT_ID=abc CLIENT_IP=1.2.3 CLASS_NAME=ABCIMPL METHOD_NAME=789{Roles} REQUEST=[<Request>
some text
</Request>
2020-09-23 INFO [http-nio-8080-exec-428] localhost.com CLIENT_ID=mno CLIENT_IP=1.2.4 CLASS_NAME=MNOP METHOD_NAME=1234{Decisions} REQUEST=[<Request>
some text
</Request>我想在一个文本文件中捕获以下格式的3个字段。
CLIENT_ID=abc , CLASS_NAME=ABCIMPL , METHOD_NAME=789{Roles}
CLIENT_ID=mno , CLASS_NAME=MNOP , METHOD_NAME=1234{Decisions}我能够捕获一个字段,但不是所有字段。
问候
发布于 2020-09-23 21:48:05
您可以尝试使用GNU awk编写和测试下面的示例吗?
awk '
BEGIN{
OFS=" , "
}
match($0,/CLIENT_ID[^ ]*/){
val=substr($0,RSTART,RLENGTH)
match($0,/CLASS_NAME[^ ]*/)
val1=substr($0,RSTART,RLENGTH)
match($0,/METHOD_NAME[^ ]*/)
print val,val1,substr($0,RSTART,RLENGTH)
val=val1=""
}' Input_file发布于 2020-09-23 23:04:26
您可以使用sed来捕获感兴趣的字段:
sed -nE 's/.* (CLIENT_ID=[^[:space:]]*).* (CLASS_NAME=[^[:space:]]*).* (METHOD_NAME=[^[:space:]]*).*/\1, \2, \3/p' file
CLIENT_ID=abc, CLASS_NAME=ABCIMPL, METHOD_NAME=789{Roles}
CLIENT_ID=mno, CLASS_NAME=MNOP, METHOD_NAME=1234{Decisions}发布于 2020-09-23 21:58:48
因为它是日志文件,所以您的字段位置是固定的。你可以使用这个简单的awk:
awk -v OFS=' , ' '$1 ~ /^[0-9]{4}(-[0-9]{2}){2}$/{ print $5, $6, $8}' file.logCLIENT_ID=abc , CLIENT_IP=1.2.3 , METHOD_NAME=789{Roles}
CLIENT_ID=mno , CLIENT_IP=1.2.4 , METHOD_NAME=1234{Decisions}https://stackoverflow.com/questions/64029207
复制相似问题