Converter strings de data como 20 de julho de 2017 para epoch e comparar no Linux

0

Estou usando o ksh e tenho um arquivo de texto com várias linhas de conteúdo a seguir. Eu estou tentando comparar a parte da data para a data atual e encontrar a diferença em dias e, em seguida, a saída "Server" e "Qmgr" parte do arquivo para outro arquivo

Aqui está o meu arquivo de entrada

server1        :       Qmgr1      :       20 July 2017
server2        :       Qmgr2      :       22 July 2017
server3        :       Qmgr3      :       22 Dec 2015

se a diferença entre a data atual e a data no arquivo for inferior a 90 dias, a saída esperada deverá ser

server3: Qmgr3

Qual poderia ser a maneira mais fácil de fazer isso?

    
por MO12 18.11.2015 / 17:24

1 resposta

0

Tente isso. Esse script lê os arquivos listados na linha de comando ou na entrada padrão e imprime os valores server e qmgr para cada linha em que a data é 90 dias ou menos no futuro.

#!/bin/sh

# also works with ksh, bash, zsh

now=$(date +%s)
ninety_days=$(( 90 * 24 * 60 * 60 ))

cat "$@" |
while read server colon qmgr colon2 qdate
do
    future=$(date +'%s' -d "$qdate")
    if [  $((future - now))  -lt  $ninety_days  ]
    then
        echo "$server $colon $qmgr"
    fi
done

Explicação:

Armazene o número de segundos entre "a época" (1970-01-01 UTC) e a hora atual na variável now :

now=$(date +%s)

Calcule o número de segundos contidos em 90 dias:

ninety_days=$(( 90 * 24 * 60 * 60 ))

Converta a data que foi lida dos últimos 3 campos do registro no número de segundos entre a "época" e essa data. Armazene na variável future (assim chamado por clareza ao comparar com a variável now ):

    future=$(date +'%s' -d "$qdate")

Subtraia now de future para obter o número de segundos entre a data atual e a data no arquivo. Calculamos o número de segundos contidos em 90 dias, para que possamos comparar isso com a diferença entre future e now .

    if [  $((future - now))  -lt  $ninety_days  ]
    
por 18.11.2015 / 18:29

Tags