我有一个文件名 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
像这样,用xargs
和GNU
date
:
$ xargs < file -I{} date -d '@{}' "+%F %T"
或者像这样,使用bourne
* bash
,dash
,ash
,yash
,ksh
,(但不符合& )zsh
:sh
csh
fish
$ 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