GNU/Linux >> Belajar Linux >  >> Linux

Format ulang stempel waktu dalam file yang dibatasi pipa

"Stempel waktu" itu bukan detik sejak zaman sebagai strftime() beroperasi, itu hanya tanggal+waktu tanpa pemisah antara tahun, bulan, dll. Anda hanya perlu manipulasi teks sederhana, bukan penggunaan fungsi waktu.

Dengan GNU awk (yang sudah Anda gunakan) untuk 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]

atau dengan 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]

Asumsi:Kolom yang akan diubah adalah satu-satunya atau kolom pertama yang berisi tepat 14 digit.

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

Upaya Anda gagal karena $4 harus menjadi waktu UNIX Epoch (waktu dalam detik sejak 1970), sebagaimana dokumen manual GNU Awk.


Jika Anda ingin menggunakan strftime -seperti metode, maka Anda dapat mempertimbangkan Miller, yang juga menyediakan strptime yang sesuai mis.

$ 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. Bagaimana cara menulis stderr ke file saat menggunakan tee dengan pipa?

  2. Bagaimana cara menyalurkan panggilan subproses ke file teks?

  3. Menambahkan stempel waktu ke nama file dengan mv di BASH

  1. Tambahkan header ke file yang dibatasi tab

  2. Apakah pipa harus menulis file sementara?

  3. cp -L vs cp -H

  1. 5 Contoh Perintah Sentuh Linux (Cara Mengubah Stempel Waktu File)

  2. Menyortir file yang dibatasi tab

  3. Bagaimana cara menyalurkan perintah bersama dalam file preseed debian?