extrai o intervalo de tempo do arquivo de log usando o AWK

1

Eu estou tentando extrair o intervalo de tempo de um arquivo de log passando variáveis do shell em 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 intervalo de tempo entre 12 horas 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 qualquer saída nem erros. Eu não sei o que está errado. Qualquer ajuda com isso seria apreciada. Obrigado

    
por Swatesh Pakhare 17.05.2016 / 02:47

1 resposta

2
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 campos seja definido para dois pontos ou espaço seguido por um ponto e vírgula. Essa combinação nunca ocorre no arquivo de entrada.

  2. No código original, a atribuição d='$date_'; resultou em d com o 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 shell para o awk usando a opção -v . Tanto o shell quanto o awk podem exigir uma cotação adequada e a opção -v 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. Adicionando +0 no código, asseguramos que o awk está fazendo comparações numéricas.

por 17.05.2016 / 03:12

Tags