データを次の形式で出力するプログラムがあります
date, time,field1,field2,field3,fieldn
12/20/14,08:01:53,318.622,0.93712,21.6867,1.1089
ファイルには多くの列があり、すべて同じである必要があります
日付形式は米国ですが、米国以外が必要です。
date, time,field1,field2,field3,fieldn,....
20/12/14,08:01:53,318.622,0.93712,21.6867,1.1089,....
これを達成する最も簡単な方法は何ですか?私は検索を行い、いくつかの例がありますが、私の状況は完全ではありません。また、dateコマンドを調べて、awkとsedを実行しましたが、コマンドを作成するのに十分な知識がありません。たとえば この回答 awkの使用は良さそうに見えましたが、私のファイルでは何もしません。
私はMacを使用しているので、OSXが提供するバージョンで機能するコマンドが必要になります。
_sed -E 's,^([0-9]+)/([0-9]+),\2/\1,'
_
sed -E
_:sedを拡張正規表現とともに使用して、_()
_などをエスケープする必要がないようにします。s/foo/bar/
_:これはsed
を検索してfoo
に置き換える一般的なbar
構文です。ここでは、式に_,
_が含まれているため、_/
_の代わりに_/
_を使用しました。これにより、式が単純化されます(ここでも、エスケープの混乱を避けることができます。したがって、_s,foo,bar,
_。^([0-9]+)/([0-9]+)
:行の先頭_^
_を検索し、その後に1つ以上の数字_[0-9]+
_を検索して、キャプチャグループ_()
_に入れます。今月です。この後に_/
_が続き、別のキャプチャグループ(つまり日)の1つ以上の数字が続きます。\2/\1
_:これを2番目のキャプチャグループ(日)、_/
_、最初のキャプチャグループ(月)に置き換えます。ファイルをこのコマンド(_<your_command_here>| sed…
_)にパイプするか、ファイルで直接実行する(_sed… file.txt
_)ことができます。これはコマンドラインに直接出力されます。新しいファイルに書き込むには、コマンドに_> output.txt
_を追加します。
日付を再フォーマットするときは、標準(ISO)形式を使用することをお勧めします:YYYY-mm-dd
Perl -MTime::Piece -F, -lane '
if ($.>1) {$F[0] = Time::Piece->strptime($F[0], "%m/%d/%y")->strftime("%F")}
print join ",", @F
'
また、ローカル以外の日時について考えているときに、そのタイムスタンプはどのタイムゾーンに属しますか? UTCですか?