您好我是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
仅打印空白行。任何帮助将不胜感激。
答案 0 :(得分:2)
使用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
答案 1 :(得分:1)
尝试此sed
命令
sed 's/.*user \([^ ]\+\).*/\1/' fileName
<强>输出:强>
a8197zz
答案 2 :(得分:0)
关注awk
可能对您有帮助。
awk '{sub(/\./,"",$NF);print $NF}' Input_file
输出如下。
a8197zz