2017-02-20 1 views
1

Je reçois la date qui se trouve dans un fichier texte et l'affecte à une variable. Quand je grep la date du fichier, je reçois ce,Comparer la date du système avec la date d'un fichier texte

Not After : Jul 28 14:09:57 2017 GMT 

Je n'affleurent la date, avec cette commande

echo $dateFile | cut -d ':' -f 2,4 

Le résultat serait

Jul 28 14:57 2017 GMT 

Comment est-ce que je convertis cette date en nombre de secondes, donc je peux la comparer à la date du système? Si c'est plus de 2 jours.

J'ai ce code mais cela ne fonctionne pas. Je reçois un message d'erreur lorsque je l'ai exécuté. Je pense que c'est parce que $ dateFile est un fichier texte et il ne sait pas comment le convertir. Toute aide serait appréciée.

#!/bin/bash 

$dateFile=grep "After :" myfile.txt | cut -d ':' -f 2,4 

AGE_OF_MONTH="172800" # 172800 seconds = 2 Days 
NOW=$(date +%s) 
NEW_DATE=$((NOW - AGE_OF_MONTH)) 

if [ $(stat -c %Y "$dateFile") -lt ${NEW_DATE} ]; then 
    echo Date Less then 2 days 
else 
    echo Date Greater then 2 days 
fi 

Répondre

0

Vous avez quelques erreurs dans votre script. S'il vous plaît essayer le ci-dessous:

#!/bin/bash 

# capture the seconds since epoch minus 2 days 
NOW=`expr $(date '+%s') - 172800` 

# read every line in the file myfile.txt 
while read -r line; 
do 
    # remove the unwanted words and leave only the date info 
    s=`echo $line | cut -d ':' -f 2,4` 
    # parse the string s into a date and capture the number of seconds since epoch 
    date=$(date -d "$s" '+%s') 

    # compare and print output 
    if [ $date -lt $NOW ]; then 
    echo "Date Less then 2 days, s=$s, date=$date, now=$NOW" 
    else 
    echo "Date Greater then 2 days, s=$s, date=$date, now=$NOW" 
    fi 
done < myfile.txt 

Cependant, cela ne fonctionnera pas: $dateFile=grep "After :" myfile.txt | cut -d ':' -f 2,4. Dans le shell, vous ne pouvez pas préfixer un nom de variable avec $ puisque le shell essayera d'évaluer le résultat en tant que variable et aussi pour exécuter une commande et l'assigner à une variable que vous devez entourer dans $(....) ou avec des guillemets.

Exemple avec la variable et la tuyauterie au tout:

#!/bin/sh 

dateFile=`grep "After :" my.txt | cut -d ':' -f 2,4` 

# capture the seconds since epoch minus 2 days 
NOW=`expr $(date '+%s') - 172800` 

echo "$dateFile" | while read -r line; 
do 
    # parse the string s into a date and capture the number of seconds since epoch 
    date=$(date -d "$line" '+%s') 

    # compare and print output 
    if [ $date -lt $NOW ]; then 
    echo "Date Less then 2 days, s=$line, date=$date, now=$NOW" 
    else 
    echo "Date Greater then 2 days, s=$line, date=$date, now=$NOW" 
    fi 
done 

Exemple redirigeant la grep et le temps:

#!/bin/sh 

# capture the seconds since epoch minus 2 days 
NOW=`expr $(date '+%s') - 172800` 

grep "After :" myFile.txt | cut -d ':' -f 2,4 | while read -r line; 
do 
    # parse the string s into a date and capture the number of seconds since epoch 
    date=$(date -d "$line" '+%s') 

    # compare and print output 
    if [ $date -lt $NOW ]; then 
    echo "Date Less then 2 days, s=$line, date=$date, now=$NOW" 
    else 
    echo "Date Greater then 2 days, s=$line, date=$date, now=$NOW" 
    fi 
done 

L'espoir que cela clarifie vos questions.

+0

Votre code fonctionne parfaitement. Je vous remercie. Je me demandais juste pourquoi vous auriez besoin d'une boucle pour lire chaque ligne du fichier car la commande grep obtiendra automatiquement les informations dont vous avez besoin ??? – user1736786

+0

J'ai modifié ma réponse pour répondre à votre question. Veuillez le sélectionner comme réponse correcte si vous en êtes satisfait. – artemisian