我是shell脚本的新手。我有这样的数据。
2018-01-18T16:23:25,389 INFO [HiveServer2-Background-Pool: Thread-63([])]:
ql.Driver (Driver.java:execute(1735)) - Executing
command(queryId=hive_20180118162325_5ad8be3f-80e7-468d-bb47-1bdc2d2fb624):
select * from aa limit 5
2018-01-18T16:23:25,393 INFO [HiveServer2-Background-Pool: Thread-63([])]:
ql.Driver (Driver.java:execute(2050)) - Completed executing
command(queryId=hive_20180118162325_5ad8be3f-80e7-468d-bb47-1bdc2d2fb624);
Time taken: 0.004 seconds
我需要从上面的数据中过滤查询并执行时间戳。 我试图过滤这样的查询。
awk 'BEGIN{ print "Query" }
/Executing command\(queryId/{ sub(/.*queryId=[^[:space:]]+: /,""); q=$0 }
/s3:\/\//{ print q }' OFS=',' hive-server2.log
它完全按照这样过滤了查询。
select * from aa limit 5
select * from aa limit 5
但我需要使用此查询过滤时间戳。
预期产出
Query,Executed Time
select * from aa limit 5,2018-01-18T16:23:25
select * from aa limit 5,2018-01-18T16:23:25
任何帮助将不胜感激。
答案 0 :(得分:0)
基于您的样本基于awk
显示的输入可能会对您有所帮助。由于我的awk
是旧版本,因此我使用了--re-interval
如果您有最新版本的版本,则可以将其从代码中删除,然后给它一个镜头。
awk -F',' '/^2018/{val=$1;next} /^select/{print $0","val;val=""}' Input_file
编辑: 此外,我已经在GNU Awk 4.1.3
进行了以下测试,以下工作正在进行。
awk -F',' '/^[0-9]{4}-[0-9]{2}-[0-9]{2}/{val=$1;next} /^select/{print $0","val;val=""}' Input_file
输出如下。
select * from pfeevent limit 5,2018-01-18T16:23:25