使用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