извлечь временной диапазон из файла журнала с помощью AWK

извлечь временной диапазон из файла журнала с помощью AWK

Я пытаюсь извлечь временной диапазон из файла журнала, передавая переменные оболочки в awk. Вот как выглядит мой файл журнала.

2014-11-24 12:58:59.290 1.1.1.1  etc..
2014-11-24 13:58:59.290 2.2.2.2  etc..
2014-11-24 14:58:59.290 3.3.3.3  etc ..
2014-11-24 12:58:59.290 4.4.4.4  etc.. 
2014-11-24 15:58:59.290 4.4.4.4  etc..

Предположим, я хочу извлечь временной диапазон между 12 и 13 часами. Вот скрипт bash, который я написал.

stime=12
etime=13
date_=2014-11-24

awk 'BEGIN {
          a='$stime';b='$etime';d='$date_'; FS="[: ]"
       }

      { 
  if ( $1 == d && $2 >= a && $2 < b )
      print $1 $2 $3
      }'  logfile.txt

Мой вывод должен выглядеть примерно так.

 2014-11-24 12:58:59.290 1.1.1.1  etc..  
 2014-11-24 12:58:59.290 4.4.4.4  etc..  

Я не вижу никаких выходных данных и никаких ошибок. Я не знаю, что не так. Любая помощь с этим будет оценена по достоинству. Спасибо

решение1

stime=12
etime=13
date=2014-11-24

awk -v a="$stime" -v b="$etime" -v d="$date" -F "[: ]+" '
  { 
  if ( $1 == d && $2+0 >= a && $2+0 < b )
      print $1,$2,$3
  }'  logfile.txt

Это дает следующий результат:

2014-11-24 12 58
2014-11-24 12 58

Примечания:

  1. FS="[: ];"заставляет разделитель полей быть установленным на двоеточие или пробел с последующей точкой с запятой. Эта комбинация никогда не встречается во входном файле.

  2. В исходном коде присваивание d='$date_';приводило к dзначению 1979. Это связано с тем, что при введении в код awk выражение 2014-11-24интерпретируется как числовое выражение, требующее вычитания.

  3. Хорошей практикой является передача переменных оболочки в awk с помощью -vопции. Как оболочка, так и awk могут требовать правильного кавычек, а -vопция позволяет нам решать эти проблемы кавычек по одной за раз.

  4. awk способен выполнять как числовое, так и алфавитное сравнение в зависимости от контекста. Добавляя +0код, мы гарантируем, что awk выполняет числовое сравнение.

Связанный контент