Как захватить еще один столбец значений в оболочке

Привет, я новичок в сценарии оболочки. У меня есть такие данные.

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
Другие вопросы по тегам