私の入力ファイルはカンマで区切られた.csvです。 2番目の列をUnix時間から次のように読みやすい日付/時刻形式に変換したいと思います。
before 1502280000
after 8/10/17 08:00:00
またタイトルなので、最初の行を無視したいです。
私はSolaris 10のbashシェルで実行しています。
私のCSVの最初の2行は次のとおりです。
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
答え1
私は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
答え2
この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
答え3
Miller(mlr
)を使用してUnixタイムスタンプ形式を指定しますstrftime_local()
。生成された時間+日付はローカルタイムゾーンです。
$ mlr --csv put '$DATE_TIME_CREATED = strftime_local($DATE_TIME_CREATED,"%c")' file
HOST,DATE_TIME_CREATED,USER_ID,EVENT_CLASS
xxxx,Wed Aug 9 13:43:00 2017,xxxx,xxxx
xxxx,Wed Aug 9 12:05:47 2017,xxxx,xxxx
strftime(3)
利用可能なフォーマット文字列については、システムのマニュアルを参照してください。%c
「国別の時間と日付表現に置き換える」形式です。