2011-09-22 19 views
1

J'ai un fichier plein de dates avec ce format (2002-09-26 02:20:30), Je veux extraire les 5 derniers jours de la fin du fichier, voici ce que je écritcalcul de dates en bash

END-DATE=tail -1 my file (which is 2002-09-26 02:20:30) 
time=$(expr 60 * 60 * 24 * 5) (counting 5days which is 432000) 
up to know every thing is ok ! the problem is with next line, 
START-DATE=`expr END-DATE - time` 

semble qu'il est erroné: expr: non-numeric argument

comment dois-je convertir ce temps en temps epoch?

+0

S'il vous plaît fixer le formatage de votre question. –

+0

pouvez-vous s'il vous plaît votre problème, avec quelques exemples ... –

+0

nous voulons voir le code que vous avez essayé, pas le code de psuedo que vous avez pensé, 'FIN-DATE = queue -1 monFichier' ne fonctionnera jamais. Avez-vous essayé de chercher ici sur S.O. Avec '[bash] date arithmétique' et similaire, il existe déjà de nombreuses réponses qui vous aideront à répondre à votre question. (Ceci est votre 4ème question sur le même problème: vous allez devoir passer du temps à apprendre comment fonctionnent les scripts shell OU comment écrire une question à laquelle les gens peuvent répondre). Bonne chance. – shellter

Répondre

1

EDATE n'est pas défini, peut-être que vous avez fait une faute de frappe et il devrait être END-DATE?

+0

non, c'est FIN-DATE – ayda

1

Vous devez faire référence à la variable, MOIS.DECALER vs $ MOIS.DECALER (vous ne signifie pas vraiment la date de fin?)

START_DATE=`expr $EDATE - time` 

(Notez que vous ne pouvez pas avoir un - dans les noms de variables shell, alors commencez-DATE et END-DATE ne sont pas valides, nommez-les plutôt START_DATE et END_DATE)

+0

J'ai écrit END-DATE ici afin que tout le monde comprenne que je veux soustraire 5 jours de la dernière date du fichier, le problème n'est pas, je ne sais pas comment travailler avec les dates – ayda

+1

@ayda Ok , mais les réponses ici répondent à votre question initiale et corrigent le mauvais code shell. Que demandez-vous réellement? – nos

1

Si vous voulez juste la date 5 jours avant un horodateur donné et que GNU Coreutils est installé, vous pouvez utiliser date -d "$(tail -n 1 some/file.ext) 5 days ago"; Si vous voulez que dans un format particulier, essayez de regarder la page de manuel date(1) (c'est-à-dire, entrez man 1 date).

0

J'ai écrit un tas d'outils (dateutils) pour lutter contre exactement ce genre de problèmes, en particulier dgrep pourrait aider:

Off le brassard, je vais pour

EDATE=$(tail -n1 MY_FILE) 
THRES=$(dadd "${EDATE}" -5d) 
dgrep ">=${THRES}" < MY_FILE