将文本文件中保存的纪元时间格式转换为人类友好的格式

将文本文件中保存的纪元时间格式转换为人类友好的格式

我有一个文件名 simcloud-target.txt,其中日期以纪元时间格式保存,我想将所有日期转换为人类友好的格式并将其打印为列表(与下面显示的输出相同,所以我想要它而不是纪元)以人类友好方式 hh:mm:00)

sec504@slingshot:~$ cat simcloud-targets.txt
1679450009
1679450014
1679450018
1679450018
1679450022
1679450023
1679450024
1679450024
1679450033
1679450043
1679450046
1679450060
1679450065
1679450071
sec504@slingshot:~$ 

答案1

如果文件中的 Unix 时间戳可以以 为前缀@,那么 GNUdate可以用 来读取它们-f。我们可以为每个时间戳添加前缀,@如下sed所示:

sed 's/^/@/' file

...然后我们可以将其输出与 GNU 一起使用,date如下所示:

date -f <(sed 's/^/@/' file)

考虑到有问题的日期戳和我当地的时区,这会给我们

Wed Mar 22 02:53:29 CET 2023
Wed Mar 22 02:53:34 CET 2023
Wed Mar 22 02:53:38 CET 2023
Wed Mar 22 02:53:38 CET 2023
Wed Mar 22 02:53:42 CET 2023
Wed Mar 22 02:53:43 CET 2023
Wed Mar 22 02:53:44 CET 2023
Wed Mar 22 02:53:44 CET 2023
Wed Mar 22 02:53:53 CET 2023
Wed Mar 22 02:54:03 CET 2023
Wed Mar 22 02:54:06 CET 2023
Wed Mar 22 02:54:20 CET 2023
Wed Mar 22 02:54:25 CET 2023
Wed Mar 22 02:54:31 CET 2023

然后,您可以像通常使用 一样设置所需的输出格式date。在这里我还展示了如何使用普通管道而不是进程替换:

$ sed 's/^/@/' file | date -f - +'%F %T'
2023-03-22 02:53:29
2023-03-22 02:53:34
2023-03-22 02:53:38
2023-03-22 02:53:38
2023-03-22 02:53:42
2023-03-22 02:53:43
2023-03-22 02:53:44
2023-03-22 02:53:44
2023-03-22 02:53:53
2023-03-22 02:54:03
2023-03-22 02:54:06
2023-03-22 02:54:20
2023-03-22 02:54:25
2023-03-22 02:54:31

strftime请参阅库函数( )的手册man 3 strftime,了解可以使用的占位符格式。

答案2

由于您几乎可以使用任何东西,因此您可以使用 (g)awk:

awk '1{$1 = strftime("%F %H:%M:%S", $1); print}' < simcloud-targets.txt

产量(因为我在不同的时区):

2023-03-22 02:53:29
2023-03-22 02:53:34
2023-03-22 02:53:38
2023-03-22 02:53:38
2023-03-22 02:53:42

我提供这个,因为即使您在时间戳之后有其他条目(例如在鱿鱼日志文件中),它仍然可以工作:

1679468468.282    223 redacted_ip TCP_TUNNEL/200 7160 CONNECT redacted_name:443 - HIER_DIRECT/redacted_ip -

变成

2023-03-22 08:01:08 223 redacted_ip TCP_TUNNEL/200 7160 CONNECT redacted_name:443 - HIER_DIRECT/redacted_ip -

答案3

像这样,用xargsGNU date

$ xargs < file -I{} date -d '@{}' "+%F %T"

或者像这样,使用bourne* bashdashashyashksh,(但不符合& )zshshcshfish

$ while read epoch; do date -d "@$epoch" "+%F %T"; done < file

输出

2023-03-22 08:53:29
2023-03-22 08:53:34
2023-03-22 08:53:38
2023-03-22 08:53:38
2023-03-22 08:53:42
2023-03-22 08:53:43
2023-03-22 08:53:44
2023-03-22 08:53:44
2023-03-22 08:53:53
2023-03-22 08:54:03
2023-03-22 08:54:06
2023-03-22 08:54:20
2023-03-22 08:54:25
2023-03-22 08:54:31

:

$ perl -nE 'say scalar localtime($_)' file 
Wed Mar 22 08:53:29 2023
Wed Mar 22 08:53:34 2023
Wed Mar 22 08:53:38 2023
Wed Mar 22 08:53:38 2023
Wed Mar 22 08:53:42 2023
Wed Mar 22 08:53:43 2023
Wed Mar 22 08:53:44 2023
Wed Mar 22 08:53:44 2023
Wed Mar 22 08:53:53 2023
Wed Mar 22 08:54:03 2023
Wed Mar 22 08:54:06 2023
Wed Mar 22 08:54:20 2023
Wed Mar 22 08:54:25 2023
Wed Mar 22 08:54:31 2023

相关内容