
我有一個包含以下內容的文件:
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
using 一起使用。system("cmd")
答案1
在這裡發現了一些東西: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
也許像這樣
perl -pe 'use POSIX qw(strftime); s/^(\d+)/strftime "%F %H:%M:%S", localtime($1)/e'
答案3
如果您願意,awk
可以使用date
任何日期格式的外部命令
awk -F, -v OFS="," '{("date +%F\ %T -d @"$1)|getline $1}1'
答案4
9 個月前我問了一個問題,該問題被標記為與此問題重複。我剛剛才看到有人請求發布對我來說對這個問題有用的答案。這是該問題和答案的連結。