Bash脚本来解析日志文件
我想解析一个日志文件来提取userIds。以下是每个日志在catalina.out中的设置方法。我只想提取userId。我将如何做到这一点。我尝试了awk和grep,但它返回的是整个块而不是userId。此外,我想获得每一个唯一的userId一次,因为同一个用户可以明显登录多次,所以我只想要我写入的文件只需要一次。请你帮我理解从哪里开始?谢谢!Bash脚本来解析日志文件
这里是我试过的命令:
awk '/userId/' catalina.out
grep "userId" catalina.out
当我做到这一点,而不是返回回用户id的,它返回的整个块(如下图所示)
登录格式:
03:44:04.373 [127.0.0.1-8009-exec-178]
INFO c.c.c.x.x.w.f.AuthenticationFilter - cachObj
{"guid":"guid","userId":"userId","isPrimary":false,"accessToken":"accessToken"}
我假设你的用户ID,会发现像“用户id”:“test_chumma”等等,如果是这样的话,那么以下可能会帮助你。
awk -F'[":,]' '/userId/{print $11}' Input_file
当然,如果你有更多的需求,那么好心给我们以饱满的条件更加样本输出。
我尝试使用您的命令与我的输入文件名,我不回来任何结果。 – redsox2002
@ redsox2002:请将更多示例Input_file发布到帖子中,然后让我们知道。 – RavinderSingh13
与AWK又如:
awk -F"[:,]" '$1 ~ /^{/ {gsub("\"","",$4); print $4}' inFile.log
在这里,我们用冒号:
或逗号,
使用awk命令F
标志-F[:,]
分割的记录,然后,如果在记录中的第一个字段$1
开始于托架/^{/
(在这里我们使用正则表达式运算符~
为条件),那么我们换出第四场的双引号一无所有gsub("\"","",$4)
和打印结果print $4
$ cat test
03:44:04.373 [127.0.0.1-8009-exec-178]
INFO c.c.c.x.x.w.f.AuthenticationFilter - cachObj
{"guid":"guid","userId":"aUserId","isPrimary":false,"accessToken":"accessToken"}
$ awk -F"[:,]" '$1 ~ /^{/ {gsub("\"","",$4); print $4}' test
aUserId
我不幸收到任何结果使用这个命令 – redsox2002
我用你的三行示例日志文件从上面。我将发布在我的包装箱上运行的确切结果。也许你的日志文件格式不同,然后你的例子? – JNevill
这里是另一种解决方案相结合awk和从UNIX切割:
awk '{split($0,a,":"); print a[2]}' catalina.out | cut -f2 -d","
"userId"
但是,这也将只为您发布的例子工作。
awk -F\" '{print $6}' file
userId
看起来像JSON输出,使用合适的解析器它 – Inian
是您的日志样品1号线或多重? – Zlemini