сравнение времени, заданного пользователем для времени файла журнала

Извиняюсь сразу за плохо оформленный вопрос и заголовок ….. изучение unix и его команды в эти дни, т пытается найти решение для ниже сценария:

Допустим, у меня есть файл журнала, который выглядит так:

01-02-1988 12:00:00 I start 01-02-1988 12:00:01 I start 01-02-1988 12:00:02 I start 01-02-1988 12:00:03 I start 01-02-1988 12:00:04 I start 01-02-1988 12:00:05 I start 01-02-1988 12:00:06 I start 01-02-1988 12:00:07 I start 01-02-1988 12:00:08 I start 01-02-1988 12:00:09 I start 01-02-1988 01:00:10 I start 

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

 egrep $usr_time log.txt 

Но есть ли способ, которым я могу сделать то же самое в течение определенного периода времени, например awk , может соответствовать значению для меня за $2 здесь … но как сравнить его за секунды (ss в hh: mm: ss) ???

Например, предположим, что я хочу записи с 12:00:01 - 12:00:06 , поэтому в основном мне нужно извлечь третье значение из : разделителя и сравнить его … как это можно достичь … .пожалуйста помоги!!!!

Если вы можете быть уверены, что записи находятся во временном заказе, вы можете использовать оба раза (если они существуют в файле!) В качестве начальных и конечных адресов:

 start cmd:> sed -n -e /12:00:03/,/12:00:09/p file 01-02-1988 12:00:03 I start 01-02-1988 12:00:04 I start 01-02-1988 12:00:05 I start 01-02-1988 12:00:06 I start 01-02-1988 12:00:07 I start 01-02-1988 12:00:08 I start 01-02-1988 12:00:09 I start 

Если возможно, что время начала и остановки не отображается в файле, тогда вы должны сравнить (может потребоваться указать дату в этом расчете)

 awk -v starttime="12:00:03" -v stoptime="12:00:09" \ 'BEGIN {FS=":"; $0=starttime; startts=$1*3600+$2*60+$3; '\ '$0=stoptime; stopts=$1*3600+$2*60+$3; FS=" ";}; ' \ '{line=$0; FS=":"; $0=$2; secs=$1*3600+$2*60+$3; if (secs>stopts) exit; '\ 'if (secs>=startts) print line; FS=" ";}' file точки awk -v starttime="12:00:03" -v stoptime="12:00:09" \ 'BEGIN {FS=":"; $0=starttime; startts=$1*3600+$2*60+$3; '\ '$0=stoptime; stopts=$1*3600+$2*60+$3; FS=" ";}; ' \ '{line=$0; FS=":"; $0=$2; secs=$1*3600+$2*60+$3; if (secs>stopts) exit; '\ 'if (secs>=startts) print line; FS=" ";}' file 

Строки можно сравнивать напрямую:

 awk -v starttime="12:00:03" -v stoptime="12:00:09" \ '{line=$0; if ($2>stoptime) exit; '\ 'if ($2>=starttime) print line; FS=" ";}' file 

Предполагая, что содержимое находится в файле x.txt , вы можете добиться этого следующим образом:

 awk ' $2~/12:00:0[1-6]/ { print }' x.txt 

Выражение $2~/12:00:0[1-6]/ будет оценивать второй столбец с предоставленным регулярным выражением, и оператор печати распечатает все соответствующие строки. Если вы хотите напечатать только второй столбец каждой строки, вы можете сделать print $2 и так далее.

Чтобы включить переменные оболочки в awk , используйте -v , например:

 ss=1 es=6 awk -v reg=12:00:0[$ss-$es] ' $2 ~ reg { print }' x.txt 

Я предлагаю проверить эту красиво написанную пользовательскую документацию awk : http://www.gnu.org/software/gawk/manual/gawk.html