Как захватить еще один столбец значений в оболочке
Привет, я новичок в сценарии оболочки. У меня есть такие данные.
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
Любая помощь будет оценена.
1 ответ
Основы на ваших образцах 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