1
votes

Formatage des chaînes de date dans un fichier avec le shell bash Linux

Quand j'écris le fichier, un exemple du format de sortie est:

ok: servername 05/23/2018
ok: servername 07/16/2019

Je voudrais que le format soit quelque chose comme

ok: servername Mon May 23 00:00:00 EDT 2018
ok: servername Thu Jul 16 00:00:00 EDT 2019

J'ai besoin d'utiliser le shell bash Linux pour le faire. Si quelqu'un pouvait m'aider, je lui en serais très reconnaissant.


3 commentaires

Qu'as-tu essayé?


Est-ce que cela répond à votre question? Convertir les formats de date en bash


Veuillez consulter: Que dois-je faire lorsque quelqu'un répond à ma question?


3 Réponses :


0
votes

Selon man date , la commande est capable de

durée d'affichage décrite par STRING, et non par "maintenant"

via --date ou -d . Donc, si vous stockez vos valeurs dans une variable

date --date="${DATE}" +%m/%d/%Y

, vous pouvez utiliser quelque chose comme

DATE="Thu Jul 16 00:00:00 EDT 2019"

pour reformater l'horodatage.

Pour plus d'informations, vous pouvez consulter Convertir les formats de date en bash .


0 commentaires

2
votes

Avec GNU date , vous pouvez spécifier un fichier d'entrée contenant toutes vos chaînes de date; combiné avec cut et paste:

ok: servername 05/23/2018
ok: servername 07/16/2019

Output:

paste -d ' ' \
    <(cut -d ' ' -f-2 infile) \
    <(date -f <(cut -d ' ' -f3- infile) '+%m/%d/%Y')

Ceci utilise processus de substitution pour créer un fichier d'entrée temporaire pour date -f , et pour coller pour créer un nouveau fichier de sortie.


0 commentaires

3
votes

Quand les performances comptent. Mettez ceci dans script.awk:

ok: servername 05/23/2018
ok: servername 07/16/2019

Utilisation: awk -f script.awk logfile

Sortie:

BEGIN{ 
  m["Jan"]="01"; m["Feb"]="02"; m["Mar"]="03"; m["Apr"]="04"; 
  m["May"]="05"; m["Jun"]="06"; m["Jul"]="07" # to be completed
}
{
  print $1, $2, m[$4] "/" $5 "/" $8
}


0 commentaires