最初の行から時刻を取得し、位置インデックスを取得してから、他の行のEPOCH時刻を人間が読める時刻に変換する必要があります。 EPOCH時間位置はランダムですが、ヘッダーがあります。例は次のとおりです。
Name,city,time
ABC,New York,1667271686096
CDF,Palo Alto,1667271685202
ベストアンサー1
入力がCSVであると仮定する場合は、次のようにします。ミラー(mlr
)フィールドの値をtime
(フィールドに表示される順序に関係なく)Unix時間から現在のロケールの現地時間表現に変換します。
$ mlr --csv put '$time = strftime_local($time,"%+")' file
Name,city,time
ABC,New York,Sat Sep 27 01:54:56 CEST 54803
CDF,Palo Alto,Sat Sep 27 01:40:02 CEST 54803
$ TZ=Canada/Central mlr --csv put '$time = strftime_local($time,"%+")' file
Name,city,time
ABC,New York,Fri Sep 26 18:54:56 CDT 54803
CDF,Palo Alto,Fri Sep 26 18:40:02 CDT 54803
UTC時間の場合は、strftime()
次のものを代わりに使用してくださいstrftime_local()
。
$ mlr --csv put '$time = strftime($time,"%+")' file
Name,city,time
ABC,New York,Fri Sep 26 23:54:56 UTC 54803
CDF,Palo Alto,Fri Sep 26 23:40:02 UTC 54803
他の時間形式の場合、または関数により具体的な時間形式文字列を提供しますstrftime()
(システムマニュアルを参照strftime_local()
)。strftime
$ mlr --csv put '$time = strftime_local($time,"At the hour %H of day %j of the year %Y")' file
Name,city,time
ABC,New York,At the hour 01 of day 270 of the year 54803
CDF,Palo Alto,At the hour 01 of day 270 of the year 54803
sec2gmt()
Millerのバージョンとシステムに応じて、常により具体的な時間形式文字列を使用したり、使いやすくした機能に切り替えることができますsec2localtime()
。
$ mlr --csv put '$time = sec2gmt($time)' file
Name,city,time
ABC,New York,54803-09-26T23:54:56Z
CDF,Palo Alto,54803-09-26T23:40:02Z
$ TZ=Europe/Stockholm mlr --csv put '$time = sec2localtime($time)' file
Name,city,time
ABC,New York,54803-09-27 01:54:56
CDF,Palo Alto,54803-09-27 01:40:02
$ TZ=Canada/Central mlr --csv put '$time = sec2localtime($time)' file
Name,city,time
ABC,New York,54803-09-26 18:54:56
CDF,Palo Alto,54803-09-26 18:40:02