extrair intervalo de tempo do arquivo de log usando AWK

extrair intervalo de tempo do arquivo de log usando AWK

Estou tentando extrair o intervalo de tempo de um arquivo de log passando variáveis ​​​​de shell no arquivo awk. É assim que meu arquivo de log é.

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

Suponha que eu queira extrair o intervalo de tempo entre 12 e 13 horas. Aqui está o script bash que escrevi.

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

Minha saída deve ficar assim.

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

Não vejo nenhuma saída nem erros. Eu não sei o que está acontecendo de errado. Qualquer ajuda com isso seria apreciada. Obrigado

Responder1

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

Isso produz a saída:

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

Notas:

  1. FS="[: ];"faz com que o separador de campo seja definido como dois pontos ou espaço seguido por ponto e vírgula. Essa combinação nunca ocorre no arquivo de entrada.

  2. No código original, a atribuição d='$date_';resultou dno valor de 1979. Isso porque, quando introduzida no código awk, a expressão 2014-11-24é interpretada como uma expressão numérica que requer subtração.

  3. É uma boa prática transferir variáveis ​​do shell para o awk usando a -vopção. Tanto o shell quanto o awk podem exigir cotações adequadas e a -vopção nos permite lidar com esses problemas de cotação um de cada vez.

  4. O awk é capaz de fazer comparações numéricas ou alfabéticas dependendo do contexto. Ao adicionar +0o código, garantimos que o awk está fazendo uma comparação numérica.

informação relacionada