区切り文字インデックスを取得し、EPOCH時間を変換します。

区切り文字インデックスを取得し、EPOCH時間を変換します。

最初の行から時刻を取得し、位置インデックスを取得してから、他の行の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

おすすめ記事