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"
Shane
la source

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
John1024
la source
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.

hroptatyr
la source
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