我有一个文件名 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:~$
Run Code Online (Sandbox Code Playgroud)
如果文件中的 Unix 时间戳可以以 为前缀@
,那么 GNUdate
可以用 来读取它们-f
。我们可以为每个时间戳添加前缀,如下所示@
:sed
sed 's/^/@/' file
Run Code Online (Sandbox Code Playgroud)
...然后我们可以将其输出与 GNU 一起使用,date
如下所示:
date -f <(sed 's/^/@/' file)
Run Code Online (Sandbox Code Playgroud)
考虑到有问题的日期戳和我当地的时区,这会给我们
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
Run Code Online (Sandbox Code Playgroud)
然后,您可以像通常使用 一样设置所需的输出格式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
Run Code Online (Sandbox Code Playgroud)
strftime
请参阅库函数( )的手册man 3 strftime
,了解可以使用的占位符格式。
由于您几乎可以使用任何东西,因此您可以使用 (g)awk:
\nawk '1{$1 = strftime("%F %H:%M:%S", $1); print}' < simcloud-targets.txt\n
Run Code Online (Sandbox Code Playgroud)\n产量(因为我在不同的时区):
\n2023-03-22 02:53:29\n2023-03-22 02:53:34\n2023-03-22 02:53:38\n2023-03-22 02:53:38\n2023-03-22 02:53:42\n\xe2\x80\xa6\n
Run Code Online (Sandbox Code Playgroud)\n我提供这个,因为即使您在时间戳之后有其他条目(例如在鱿鱼日志文件中),它仍然可以工作:
\n1679468468.282 223 redacted_ip TCP_TUNNEL/200 7160 CONNECT redacted_name:443 - HIER_DIRECT/redacted_ip -\n
Run Code Online (Sandbox Code Playgroud)\n变成
\n2023-03-22 08:01:08 223 redacted_ip TCP_TUNNEL/200 7160 CONNECT redacted_name:443 - HIER_DIRECT/redacted_ip -\n
Run Code Online (Sandbox Code Playgroud)\n