发布于 5年前

使用shell脚本从日志中提取特定值

刚接触 shell 脚本,我尝试着从 log 文件中提取特定的值。

当我通过使用特定的关键字过滤数据,

cat hive-server2.log | grep user

输出数据:

2018-01-18T16:20:39,464 WARN  [67272380-f3e9-40da-8e8e-a209c05eb4fe HiveServer2-Handler-Pool: Thread-37([])]: util.CurrentUserGroupInformation (CurrentUserGroupInformation.java:getGroupNameFromUser(52)) - user a8197zz (auth:PROXY) via hive (auth:SIMPLE) has no primary groupName, setting groupName to be a8197zz.

在上面的数据中,我想为这个用户提取具体的值。

a8197zz

我试着这样操作:

awk 'BEGIN{ print "User" }
 /\<user\>/{ u=$10 }
 //{ print u }' OFS=',' hive-server2.log

但它只打印出空行。

解决办法:

GNU grep

grep -Po '[^ ]*(?=\.$)' file

或者

grep -Po 'user \K[^ ]*' file

awk

awk -F "[. ]" '{print $(NF-1)}' file

或者

awk -F "user " '{split($2,array," "); print array[1]}' file

或用字符串搜索字段 user 并打印下一个字段:

awk '{for(i=1; i<=NF; i++) if ($i=="user") print $(i+1) }' file

输出:

a8197zz
©2020 edoou.com   京ICP备16001874号-3