如何更新命令生成的每行 date/time

How to update date/time per line generated by command

听起来很简单,但我没有做到...

我想在生成行的 date/time 前添加命令(返回多行)的输出。这里为了简化,我以 ls 为例。真正的命令太长了。

ls 命令表示:

root@gan:~/test# ls -l
total 0
-rw-r--r-- 1 root root 0 Sep 23 08:54 file_a
-rw-r--r-- 1 root root 0 Sep 23 08:54 file_b
-rw-r--r-- 1 root root 0 Sep 23 08:54 file_c

据我了解...

root@gan:~/test# ls -l | awk -v var=$(date +"%Y%m%d-%H%M%S") '{ print var " " [=12=] }'
20150923-102310 total 0
20150923-102310 -rw-r--r-- 1 root root 0 Sep 23 08:54 file_a
20150923-102310 -rw-r--r-- 1 root root 0 Sep 23 08:54 file_b
20150923-102310 -rw-r--r-- 1 root root 0 Sep 23 08:54 file_c

现在,date/time 是执行 命令时的那个 ,不是每行更新 ls 命令生成的。

我如何修改它,以便 ls 命令生成的每一行都在生成行的 date/time 之前(与执行的命令 date/time 相对)?

非常感谢!

您可以为每一行执行 date 命令,而不是在变量中使用 date 结果,然后您将获得不同的日期时间。

ls -l |awk -v cmd="date +%Y%m%d-%H%M%S%N" '{cmd|getline d; print d,[=10=];close(cmd)} '

在上一行中,您可以看到,cmd 变量不是 date 命令的结果(不是 $(...))。它只是命令行字符串。

我在模式中添加了%N(纳秒),这样我们就可以看到不同的时间戳。

如果我在我的 /tmp/test 目录上测试它,输出是:

kent$  ls -l |awk -v cmd="date +%Y%m%d-%H%M%S%N" '{cmd|getline d; print d,[=11=];close(cmd)} '
20150923-112448877540265 total 4
20150923-112448884685628 -rw-r--r-- 1 kent kent  49 Sep 22 12:31 f
20150923-112448891512367 -rw-r--r-- 1 kent kent   0 Sep 18 12:54 fao
20150923-112448898479494 -rw-r--r-- 1 kent kent   0 Sep 18 12:54 fbo
20150923-112448904315207 -rw-r--r-- 1 kent kent   0 Sep 18 12:54 fco
20150923-112448912507549 drwxr-xr-x 6 kent kent 260 Sep 22 17:18 javassist/