如何更新命令生成的每行 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/
听起来很简单,但我没有做到...
我想在生成行的 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/