GNU/Linux >> Tutoriels Linux >  >> Linux

Reformater l'horodatage dans un fichier délimité par des canaux

Ces "horodatages" ne sont pas des secondes depuis l'époque en tant que strftime() fonctionne, ce sont juste des dates + heures sans séparateurs entre les années, les mois, etc. Vous avez juste besoin d'une simple manipulation de texte, pas d'utilisation de fonctions temporelles.

Avec GNU awk (que vous utilisez déjà) pour gensub() :

$ awk 'BEGIN{FS=OFS="|"} {$4=gensub(/(.{4})(..)(..)(..)(..)(..)/,"\\1-\\2-\\3 \\4:\\5:\\6",1,$4)} 1' file
John|Doe|TEST|2021-07-28 12:08:21|[email protected]
John|Davis|TEST|2021-08-28 12:08:21|[email protected]
John|Smith|TEST|2021-05-28 12:08:21|[email protected]

ou avec n'importe quel awk :

$ awk 'BEGIN{FS=OFS="|"} {$4=sprintf("%s-%s-%s %s:%s:%s", substr($4,1,4), substr($4,5,2), substr($4,7,2), substr($4,9,2), substr($4,11,2), substr($4,13,2))} 1' file
John|Doe|TEST|2021-07-28 12:08:21|[email protected]
John|Davis|TEST|2021-08-28 12:08:21|[email protected]
John|Smith|TEST|2021-05-28 12:08:21|[email protected]

Hypothèse :Le champ à modifier est le seul ou le premier qui contient exactement 14 chiffres.

sed -E 's=\|([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})\|=|\1-\2-\3 \4:\5:\6|='

Votre tentative échoue car $4 devrait être l'heure UNIX Epoch (temps en secondes depuis 1970), comme le documente le manuel GNU Awk.


Si vous souhaitez utiliser un strftime -like méthode, alors vous pourriez envisager Miller, qui fournit également le strptime correspondant ex.

$ mlr --nidx --fs '|' put -S '
    $4 = strftime(strptime($4,"%Y%m%d%H%M%S"),"%Y-%m-%d %H:%M:%S")
  ' file
John|Doe|TEST|2021-07-28 12:08:21
John|Davis|TEST|2021-08-28 12:08:21
John|Smith|TEST|2021-05-28 12:08:21

Linux
  1. 5 exemples de commandes tactiles Linux (comment modifier l'horodatage des fichiers)

  2. Comment écrire stderr dans un fichier tout en utilisant tee avec un tuyau ?

  3. Comment diriger un appel de sous-processus vers un fichier texte ?

  4. Pipe doit-il écrire un fichier temporaire?

  5. cp -L vs cp -H

Comment trouver des fichiers basés sur l'horodatage sous Linux

Supprimer la virgule entre les guillemets uniquement dans un fichier délimité par des virgules ?

Rediriger et canaliser la sortie ?

Tuyau B à D ? – A &&B || C | RÉ?

Fichier audio de tuyau Linux vers l'entrée du microphone

Comment regrouper des commandes dans un fichier de préconfiguration Debian ?