Escolha uma data de uma resposta de comando

1

Eu tenho uma resposta de comando que parece algo assim:

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

XXX  |   XXX | Thu Oct 18 03:32:00 UTC 2018

XXX  |   XXX | Thu Oct 18 03:32:00 UTC 2018

Existem muitos espaços de tabulação entre cada conjunto de caracteres e pipe. O objetivo é escolher a data da resposta e, em seguida, compará-la com a hora atual, encontrar a diferença e certificar-se de que não seja mais do que 300 segundos. Esta é a minha primeira vez fazendo um script de shell e não tenho certeza de como isso poderia funcionar.

Eu tentei usar o grep para obter toda a linha. Existe uma maneira de negligenciar os espaços entre os personagens? Como faço para converter esse formato de uma data para o formato de data regular?

    
por Aman Deep Middha 19.10.2018 / 01:55

2 respostas

0
#!/bin/bash
grep 'UTC\|EDT\|EST' file | cut -d' ' -f 8 | while IFS= read line; do

now=$(date | cut -d' ' -f 4)

time_now=$(date -u -d "$now" +"%s")   #seconds
time_line=$(date -u -d "$line" +"%s") #seconds

difference=$(echo $((time_now - time_line)))

  if [ $difference -lt 300 ] 

     then
       echo "Time difference is less than 300 seconds"

     else 
       echo "Time difference is more than 300 seconds"
   fi

done
    
por 19.10.2018 / 02:37
0

Aqui você obtém a diferença do dat / hora atual para cada data no arquivo, em segundos:

sed -rn '/([[:alpha:]]{3} ){2}([ [:digit:]]{2}[ :]){4}/ s/^.*\|[[:space:]]*//p' file | date +"echo \$(( $NOW - %s ))" -f- | sh
109431
109431

O formato de saída, e o que fazer com ele, deve ser especificado ...

    
por 19.10.2018 / 12:07