Comment convertir une date du format numérique au format chaîne?

0

Mon entrée est [10/04/16 01:02:03 BST].Comment puis-je convertir Apr 10 16 01:02:03? Et je ne veux pas remplacer /à -.

Vishwaroopa
la source
1
Vous pouvez éditer librement vos propres messages, mais pour votre protection, vous devez le faire sous le compte utilisateur d'origine. Il semble que vous ayez créé un deuxième compte, ce qui gênera également votre capacité à commenter au sein de votre fil de discussion et à accepter une réponse. Voir Fusionner mes comptes pour obtenir la fusion de vos comptes, ce qui résoudra le problème.
fixer1234
@ fix1234 Je ne pense pas qu'il y ait de raison de ne pas autoriser cette modification. Sinon, la question restera incertaine pendant un certain temps, non?
Slhck
1
@slhck, j'avais du mal à suivre le montage, et comme je ne pouvais pas vérifier l'auteur, j'ai pensé qu'il serait prudent de laisser le PO le faire après la fusion de comptes (ou que d'autres relecteurs puissent le bénir ou le nettoyer) .
fix1234
@Vishwaroopa, il semble que l'édition ait été rejetée. Si vous réessayez sous le compte d'origine, vous devriez pouvoir le faire sans contrôle. Si vous ne vous rappelez pas comment y accéder et que vous ne voulez pas attendre que vos comptes soient fusionnés, essayez à nouveau de le modifier sous le compte que vous utilisez. Espérons que les commentaires ici conduiront à l'acceptation de la modification.
fix1234
vous pouvez "accepter" les réponses qui résolvent vos préoccupations / problèmes en cliquant sur "coche" à la réponse. Ceci donnera un crédit équitable à l'auteur. (et motiver les autres à mieux aussi ..) (:
p._phidot_

Réponses:

1

Utilisation de awk:

$ echo '[10/04/16 01:02:03 BST]' | awk -F'[][/: ]' 'BEGIN{split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec",m,/ /)} {print m[$3+0],$2,$4,$5":"$6":"$7}'
Apr 10 16 01:02:03

Comment ça marche

  • -F'[][/: ]'

    Ceci définit le séparateur de champ à l' un des [, ], /, :ou blanc.

  • BEGIN{split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec",m,/ /)}

    Ceci définit un tableau mcontenant les noms de mois

  • print m[$3+0],$2,$4,$5":"$6":"$7

    Ceci affiche la date dans le nouveau format.

Entrée alternative avec barres obliques inverses

S'il y a des barres obliques inverses dans l'entrée, nous pouvons les ignorer en ajoutant la barre oblique inversée à notre liste de séparateurs de champs:

$ echo '\[10\/04\/16 01:02:03 BST\]' | awk -F'[][/: \\\\]+' 'BEGIN{split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec",m,/ /)} {print m[$3+0],$2,$4,$5":"$6":"$7}'
Apr 10 16 01:02:03
John1024
la source
1

Selon votre version de date(systèmes basés sur GNU), cela fera l'affaire.

date -jf '[%d/%m/%y %T BST]' '[10/04/16 01:02:03 BST]' +'%b %d %g %T'

Des dates ou heures non valides, telles qu'un jour ou un mois invalide, génèrent une erreur. Donc ça ne marchera pas.

date -jf '[%d/%m/%y %T BST]' '[10/13/16 01:02:03 BST]' +'%b %d %g %T'

Les jours au-delà de la fin du mois se répandent dans le mois suivant, donc cela "se termine" au 02 mars 01:02:03.

date -jf '[%d/%m/%y %T BST]' '[31/02/16 01:02:03 BST]' +'%b %d %g %T'
Creidhne
la source