GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Formatieren Sie den Zeitstempel in einer durch Pipes getrennten Datei neu

Diese "Zeitstempel" sind keine Sekunden seit der Epoche als strftime() funktioniert, es sind nur Daten+Zeiten ohne Trennzeichen zwischen Jahren, Monaten usw. Sie brauchen nur eine einfache Textmanipulation, keine Verwendung von Zeitfunktionen.

Mit GNU awk (das Sie bereits verwenden) für 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]

oder mit jedem 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]

Annahme:Das zu ändernde Feld ist das einzige oder erste, das genau 14 Stellen enthält.

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|='

Ihr Versuch schlägt fehl, weil $4 müsste die UNIX-Epochenzeit sein (Zeit in Sekunden seit 1970), wie das GNU Awk-Handbuch dokumentiert.


Wenn Sie einen strftime verwenden möchten -ähnliche Methode, dann könnten Sie Miller in Betracht ziehen, das auch den entsprechenden strptime bereitstellt Bsp.

$ 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. Komma zwischen den Anführungszeichen nur in einer kommagetrennten Datei entfernen?

  2. Ausgabe umleiten und leiten?

  3. 5 Beispiele für Linux-Touch-Befehle (So ändern Sie den Dateizeitstempel)

  4. Sortieren einer tabulatorgetrennten Datei

  5. So öffnen Sie eine Datei in vim mit Pipe

So finden Sie Dateien basierend auf dem Zeitstempel in Linux

Rohr B nach D? – A &&B || C | D?

Linux-Pipe-Audiodatei zum Mikrofoneingang

Muss Pipe eine temporäre Datei schreiben?

Zeitstempel, Änderungszeit und Erstellungszeit einer Datei

Wie leite ich Befehle in einer Debian-Preseed-Datei zusammen?