如何将列中的时间戳转换为日期?

如何将列中的时间戳转换为日期?

我有一个包含以下内容的文件:

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

相关内容