从日志文件中提取关键字

时间:2018-03-29 12:34:00

标签: bash awk sed grep sh

我需要根据我的grep命令过滤关键字。以下是我的日志文件。

2018-03-20T15:07:33,432 INFO  [26b604b7-43cf-4bdc-9ffb-6bae323f8fc5 HiveServer2-Handler-Pool: Thread-55([])]: ql.Driver (Driver.java:compile(429)) - Compiling command(queryId=hive_20180320150733_cb6c088a-2b53-4826-891a-2dd905b16cef): SELECT * FROM table limit 5

我需要像这样提取特定的查询。

SELECT * FROM table limit 5

我试过这个

grep -oE 'SELECT * FROM [a-zA-Z][a-zA-Z0-9_]*' hive-server2.log

尝试使用awk

awk 'BEGIN{ print "" }
 /Executing command\(queryId/{ sub(/.*queryId=[^[:space:]]+: /,""); q=$0 }
 /s3:\/\//{ print "," q }' OFS=',' hive-server2.log

对我来说没有任何作用。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

如果您的实际Input_file与显示的示例相同,则以下内容可能会对您有所帮助。

awk '{sub(/.*SELECT/,"SELECT")} 1'  Input_file

解决方案第二:

awk 'match($0,/SELECT.*/){print substr($0,RSTART,RLENGTH);}'  Input_file

答案 1 :(得分:1)

<强> SED

使用字符串“SELECT”

更改SELECT(包括SELECT)之前的所有字符串
  sed -n 's/.*SELECT/SELECT/p'  file

<强>的grep

你可以运行它(显示正则表达式):

 grep -oE 'SELECT .*' file