2017-02-20 3 views
0

У меня есть данные ниже, и я смог получить данные на текущую дату, Как я могу сравнить время, чтобы получить данные от 00:00:01 до 08:00:00?awk, чтобы сравнить поле времени для 24 часов данных

Test1 prog 02/20/2017 03:45:56 Success 
Test2 prog 02/20/2017 05:21:38 Fail 
Test3 prog 02/20/2017 09:35:36 Success 
Test4 prog 02/19/2017 06:15:56 Fail 
Test5 prog 02/18/2017 07:35:16 Active 
Test6 prog 02/19/2017 03:45:56 Success 

Я сделал

a=`date +%m/%d/%Y` 
awk -v a="$a" '$3==a' file 

У меня нет никаких мыслей о том, как сделать я нарушу четвертый столбец, т.е. времени, чтобы сравнить его диапазон времени.

ответ

0
a=$(date +%m/%d/%Y) 

awk -F":| *" -v a="$a" '$3==a {t=($4*60*60 + $5*60 + $6); if(t>=1 && t<=28800) print}' File 

Использование : и space sequence как полевые сепаратора обеспечивают. Здесь я конвертирую время в секундах и проверяю, находится ли оно между (включенным) 1s и 8hrs. Если тогда, напечатайте линию. Дата проверки выполняется в качестве первого фильтра ($3==a)

+0

Можно ли отсортировать также в это время столбец? – Sid

+0

Возможно ли, если столбец даты изменяется, так как в нем выполняется поиск a = $ (date +% m /% d /% Y) с начала строки, а затем найдено, после чего вычисляется время из следующего поля – Sid

+0

@Sid: : 'awk -F": | * "-va =" $ a "'{i = 0; while (++ i <= NF) {if (match ($ i, a)) {t = ($ (i + 1) * 3600 + $ (i + 2) * 60 + $ (i + 3)); if (t> = 1 && t <= 28800) print}}} 'Файл' –

0
awk -v a=`date '+%m/%d/%Y'` '$3$4 ~ a"0[0-8]"' file 

Вышеперечисленные дает необходимые линии для сегодняшнего дня.

Если вы хотите, чтобы все такие строки, а затем использовать:

awk '$4 ~ "0[0-8]"' file 

Обратите внимание, что вы должны изменить регулярное выражение (строка после ~) в соответствии с временным диапазоном.

Смежные вопросы