如何將列中的時間戳記轉換為日期?

如何將列中的時間戳記轉換為日期?

我有一個包含以下內容的文件:

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"我無法使其與awkusing 一起使用。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 個月前我問了一個問題,該問題被標記為與此問題重複。我剛剛才看到有人請求發布對我來說對這個問題有用的答案。這是該問題和答案的連結。

https://unix.stackexchange.com/a/304009/172916

相關內容