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

Bash 使用shell脚本从日志中提取值,bash,shell,awk,sed,grep,Bash,Shell,Awk,Sed,Grep,嗨,我是新的shell脚本。我试图从日志中提取特定值 当我使用特定关键字筛选数据时。看起来像这样 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 (CurrentUserGroup

嗨,我是新的shell脚本。我试图从日志中提取特定值

当我使用特定关键字筛选数据时。看起来像这样

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
我试过了

a8197zz
awk 'BEGIN{ print "User" }
 /\<user\>/{ u=$10 }
 //{ print u }' OFS=',' hive-server2.log
awk'开始{打印“用户”}
/\/{u=$10}
//{print u}'OFS=','hive-server2.log
它只打印空行。任何帮助都将不胜感激。

GNU grep:

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

使用awk:

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

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

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

awk'{for(i=1;i跟随
awk
可能会在同样的方面帮助您

awk '{sub(/\./,"",$NF);print $NF}'  Input_file
输出如下

a8197zz

也可以尝试此
sed
命令

sed 's/.*user \([^ ]\+\).*/\1/' fileName
输出:

a8197zz

我建议
sed-n'/user/s/*user\([^]\+\)./\1/p”文件名
,以避免收到不包含“user”的垃圾邮件。@daniu,谢谢你的建议
a8197zz