列のタイムスタンプを日付に変換するにはどうすればよいですか?


15

これを含むファイルがあります:

1415602803,LOGIN SUCCESS,AUTH,user2,192.168.203.63,10.146.124.73,59996,22
1415602807,LOGIN SUCCESS,AUTH,user1,172.24.31.10,172.32.1.1,48191,22
1415602811,LOGIN FAILED,AUTH,root,172.24.166.153,10.146.124.73,52506,22
1415602815,LOGIN FAILED,AUTH,user3,192.168.123.55,10.146.32.99,55750,22

タイムスタンプをこの形式の日付に変換したい:

2014-11-10 02:00:03,LOGIN SUCCESS,AUTH,user2,192.168.203.63,10.146.124.73,59996,22
2014-11-10 02:00:07,LOGIN SUCCESS,AUTH,user1,172.24.31.10,172.32.1.1,48191,22
2014-11-10 02:00:11,LOGIN FAILED,AUTH,root,172.24.166.153,10.146.124.73,52506,22
2014-11-10 02:00:15,LOGIN FAILED,AUTH,user3,192.168.123.55,10.146.32.99,55750,22

どうやってやるの?

私はこれが機能することを知っています:(この質問perl -pe 's/(\d+)/localtime($1)/e'から)しかし、出力形式はです。Mon Nov 10 02:00:03 2014

このコマンドでタイムスタンプを目的の出力に変換できることはわかっていますdate -d@1415602803 +"%F %H:%M:%S"が、すべての引用符などのために、それをawk使用して動作させることはできませんでしたsystem("cmd")

回答:


6

おそらくこのように

perl -pe 'use POSIX qw(strftime); s/^(\d+)/strftime "%F %H:%M:%S", localtime($1)/e' 

17

ここで何かが見つかりました:Stackoverflow-コマンドラインでunixtimeから変換します

これに来ました:

awk -F"," '{OFS=","; $1=strftime("%Y-%m-%d %H:%M:%S", $1); print $0}' file
  • -F","のフィールド区切り文字を使用するには,
  • OFS=",";出力フィールドもで区切られるように,
  • $1=strftime("%Y-%m-%d %H:%M:%S", $1);最初のフィールドの値を$1指定された形式に変更します。
  • print $0; 行全体を印刷します。

2
awk 'BEGIN{ print strftime("%Y-%m-%d %H:%M:%S", 0) }'awk: line 2: function strftime never definedここに与えます。すべてのAWKにはないことを明確にしてくださいstrftime()!ほとんどの(すべて?)AWKで実行されているソリューションの場合、外部dateコマンドを使用して移植性を維持してください。

2
@yeti、date拡張機能としてフォーマット間で日付を変換できる実装がいくつかありますが、その方法は実装によって完全に異なります。たとえば、Costasが提供するソリューションでは、GNU固有の構文が使用されますdate。移植性が必要な場合は、を使用しますperl
ステファンシャゼラス

4

必要に応じて、任意の日付形式でawk外部コマンドdateを使用できます

awk -F, -v OFS="," '{("date +%F\ %T -d @"$1)|getline $1}1'

使用していないため+1 strftime()

4
行の何千が処理されている場合は、外部コマンドを使用すると、特に顕著、深刻なパフォーマンスヒットが発生することに注意してください
ホセ・ゴメス・

2

また試すことができます:

cat test.txt | sed 's/^/echo "/; s/\([0-9]\{10\}\)/`date -d @\1`/; s/$/"/' | bash

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.