extraer el rango de tiempo del archivo de registro usando AWK

extraer el rango de tiempo del archivo de registro usando AWK

Estoy intentando extraer el rango de tiempo de un archivo de registro pasando variables de shell en awk. Así es mi archivo de registro.

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..

Supongamos que quiero extraer un rango de tiempo entre 12 y 13 horas. Aquí está el script bash que he escrito.

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

Mi salida debería verse así.

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

No veo ningún resultado ni ningún error. No sé qué está pasando. Se agradecería cualquier ayuda con esto. Gracias

Respuesta1

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

Esto produce la salida:

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

Notas:

  1. FS="[: ];"hace que el separador de campo se establezca en dos puntos o espacio seguido de un punto y coma. Esa combinación nunca ocurre en el archivo de entrada.

  2. En el código original, la asignación d='$date_';tenía como resultado del valor de 1979. Esto se debe a que, cuando se introduce en el código awk, la expresión 2014-11-24se interpreta como una expresión numérica que requiere resta.

  3. Es una buena práctica transferir variables de shell a awk usando la -vopción. Tanto el shell como el awk pueden requerir comillas adecuadas y la -vopción nos permite abordar estos problemas de comillas uno a la vez.

  4. awk es capaz de realizar comparaciones numéricas o alfabéticas según el contexto. Al agregar +0el código, nos aseguramos de que awk esté realizando una comparación numérica.

información relacionada