GNU/Linux >> Znalost Linux >  >> Linux

Přeformátovat časové razítko v souboru odděleném svislou čarou

Tato "časová razítka" nejsou sekundy od epochy jako strftime() fungují, jsou to jen data+časy bez oddělovačů mezi roky, měsíci atd. Potřebujete jednoduchou manipulaci s textem, nikoli použití časových funkcí.

S GNU awk (který již používáte) pro 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]

nebo s jakýmkoliv 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]

Předpoklad:Pole, které se má změnit, je jediné nebo první, které obsahuje přesně 14 číslic.

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

Váš pokus se nezdařil, protože $4 by musel být čas UNIX Epoch (čas v sekundách od roku 1970), jak dokumentuje příručka GNU Awk.


Pokud chcete použít strftime -jako metoda, pak byste mohli zvážit Miller, který také poskytuje odpovídající strptime např.

$ 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. Musí potrubí zapisovat dočasný soubor?

  2. Jak otevřít soubor ve vim pomocí pipe

  3. časové razítko, čas modifikace a čas vytvoření souboru

  1. Účel použití Fifo vs dočasný soubor nebo potrubí?

  2. Odstranit čárku mezi uvozovkami pouze v souboru odděleném čárkou?

  3. cp-L vs. cp-H

  1. Náhrada procesu a potrubí?

  2. Přesměrování a výstup potrubí?

  3. Jak zapíšu stderr do souboru při použití tee s potrubím?