web-dev-qa-db-fra.com

Comment puis-je produire une sortie de tuyau à ce jour -d "valeur"?

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

Avec l'utilisation de GREP et de coupe, j'ai extrait la date dans GMT à partir d'un fichier. Cependant, j'ai du mal à convertir cela en mon temps local.

Par exemple:

[Utilisateur @ journal du serveur] # grep "quelque chose" logfile.txt | grep "a réussi" | Couper -f1 -d '['

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

Que puis-je ajouter à la fin, passer cette sortie à "Date -D"?

Tentative:

  • [Utilisateur @ journal du serveur] # grep "quelque chose" logfile.txt | grep "a réussi" | CUT -F1 -D '[' | daté
  • [Utilisateur @ journal du serveur] # grep "quelque chose" logfile.txt | grep "a réussi" | CUT -F1 -D '[' | Date
  • [Utilisateur @ journal du serveur] # grep "quelque chose" logfile.txt | grep "a réussi" | CUT -F1 -D '[' | Date -d "$ 1"
14
Shane
gmt="$(grep "something" logfile.txt | grep "Succeeded" | cut -f1 -d'[')"
date -d "$gmt"

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

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

Le problème est que date n'utilise pas stdin. Ainsi, nous devons capturer la STDIN dans une variable (appelée gmt ici), puis fournir celle de la ligne de commande à date.

Échantillon 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
13
John1024

Si vous utilisez GNU date à partir d'un Coreutils suffisamment récent, il y a date -f, à partir de 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 - signifie STDIN.

19
hroptatyr