Comment diriger la sortie vers la «valeur» date -d?


14

J'ai une date comme "2014-01-30 05:04:27 GMT", et si je lance la date -d "2014-01-30 05:04:27 GMT", la sortie est dans le fuseau horaire de mon serveur ("Jeu 30 janvier 16:04:27 EST 2014 ").

Avec l'utilisation de grep et cut, j'ai extrait la date en GMT d'un fichier. Cependant, j'ai du mal à convertir cela en heure locale.

Par exemple:

[journal utilisateur @ serveur] # grep "quelque chose" logfile.txt | grep "Réussi" | cut -f1 -d '['

Sortie: 2014-01-30 05:04:27 GMT

Que puis-je ajouter à la fin, pour passer cette sortie à "date -d"?

Tentative:

  • [journal utilisateur @ serveur] # grep "quelque chose" logfile.txt | grep "Réussi" | cut -f1 -d '[' | daté
  • [journal utilisateur @ serveur] # grep "quelque chose" logfile.txt | grep "Réussi" | cut -f1 -d '[' | Date
  • [journal utilisateur @ serveur] # grep "quelque chose" logfile.txt | grep "Réussi" | cut -f1 -d '[' | date -d "$ 1"

Réponses:


13
gmt="$(grep "something" logfile.txt | grep "Succeeded" | cut -f1 -d'[')"
date -d "$gmt"

Ou, si vous préférez le format pipeline:

grep "something" logfile.txt | grep "Succeeded" | cut -f1 -d'[' | { read gmt ; date -d "$gmt" ; }

Le problème est qu'il daten'utilise pas stdin. Ainsi, nous devons capturer le stdin dans une variable (appelée gmtici) puis fournir cela sur la ligne de commande à date.

Exemple de sortie de la deuxième approche:

$ echo  "2014-01-30 05:04:27 GMT" | { read gmt ; date -d "$gmt" ; }
Wed Jan 29 21:04:27 PST 2014

1
Merci, cela a résolu le problème! Je vous remercie également d'expliquer la raison pour laquelle cela n'a pas fonctionné.
Shane

19

Si vous utilisez la date GNU à partir d'un coreutils suffisamment récent, il y a date -f, depuis l'écran d'aide:

-f, --file=DATEFILE       like --date once for each line of DATEFILE

Donc, votre tentative 4 aurait pu être:

$ grep "something" logfile.txt | grep "Succeeded" | cut -f1 -d'[' | date -f -

le dernier -représente stdin.


2
Cela devrait être la réponse acceptée.
Petrus K.

Est-il possible de comparer la sortie de la commande ci-dessus à une date particulière. Par exemple. Je dois lister toutes les dates antérieures au "Mer 30 jan 21:04:27 PST 2014"
Manu

@Manu pas en soi, les dateutils ont dategreppour ce cas d'utilisation spécifique.
hroptatyr

C'est tellement plus simple! Si seulement je pouvais lire, j'aurais peut-être trouvé cela dans la page de manuel.
Ken Sharp
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.