Bash

將 csv 文件中的第二列從 Unix 時間轉換為可讀日期/時間的 Bash 腳本

  • August 11, 2017

我的輸入文件是逗號分隔的 .csv。我想將第二列從 unix 時間轉換為這樣的可讀日期時間格式……

before   1502280000
after    8/10/17 08:00:00

我也想忽略第一行,因為它是標題。

我在 Solaris 10 上的 bash shell 中執行

我的 csv 的前兩行看起來像這樣

HOST,DATE_TIME_CREATED,USER_ID,EVENT_CLASS
xxxx,1502286180,xxxx,xxxx
xxxx,1502280347,xxxx,xxxx

尋找輸出

HOST,DATE_TIME_CREATED,USER_ID,EVENT_CLASS
xxxx,Wed Aug  9 09:43:00 EDT 2017,xxxx,xxxx
xxxx,Wed Aug  9 08:05:47 EDT 2017,xxxx,xxxx

我強烈推薦時間格式 YYYY-mm-dd HH:MM:SS——這種格式是明確的,它按詞彙和時間順序排序。

您可以為此使用 perl:

perl -MPOSIX=strftime -F, -ane '
   $F[1] = strftime("%F %T", localtime $F[1]) if $. > 1; 
   print join ",", @F
' file

awk方法:

awk -F, 'NR>1{printf"%s,",$1;
            system("printf \"$(date -d @"$2")\"");printf",%s,%s\n",$3,$4}
' infile.txt
HOST,DATE_TIME_CREATED,USER_ID,EVENT_CLASS
xxxx,Wed Aug  9 09:43:00 EDT 2017,xxxx,xxxx
xxxx,Wed Aug  9 08:05:47 EDT 2017,xxxx,xxxx

引用自:https://unix.stackexchange.com/questions/385503