听起来很简单,但我没有管理......
我希望在命令的输出(返回几行)前加上生成该行的日期/时间。为了简化这里,我以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 " " $0 }'
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
现在,日期/时间是命令执行时的日期/时间,而不是每行ls
命令生成的更新。
如何修改此命令,以便生成每一行ls
命令的前一行是生成行的日期/时间(而不是命令执行的日期/时间)?
非常感谢!
答案 0 :(得分:0)
您可以为每一行执行date
命令,而不是在变量中使用date
结果,然后您将获得不同的日期时间。
ls -l |awk -v cmd="date +%Y%m%d-%H%M%S%N" '{cmd|getline d; print d,$0;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,$0;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/