首页 > 解决方案 > 如何使用 awk 命令在日志文件中添加“日期”作为列

问题描述

我正在尝试构建自己的硬件监视器,但我一直在尝试将时间戳放在我的日志文件中。

我正在使用“ps axu”来获取结果,并尝试在将结果发送到文件之前使用 awk 过滤结果。

使用以下命令:

ps axu |awk 'NR==1 {print $0}; $3 > 0'

我得到这个结果:

USER     PID  %CPU %MEM   VSZ   RSS   TTY      STAT START   TIME COMMAND
user+    1421  0.1  0.9 304212  36384 tty2     Sl+  Oct27   4:11 /usr/lib/
user+    1584  0.1  2.0 3626228 82152  ?       Ssl  Oct27   5:43 /usr/bin/
user+    2096  0.7 14.6 4197076 587032 ?       Sl   Oct27  22:14 /usr/lib/
user+    2248  0.5  8.4 3147328 340168 ?       Sl   Oct27  14:48 /usr/lib/
user+    2272  1.0 14.6 3298264 587372 ?       Sl   Oct27  30:47 /usr/lib/
user+   18658  0.1  0.0  12232  2468  pts/1    S+   Oct28   1:03 top

我想将此发送到一个新文件,添加一个带有时间戳的列,如下所示:

USER     PID  %CPU %MEM   VSZ   RSS   TTY      STAT START   TIME COMMAND   TIMESTAMP
user+    1421  0.1  0.9 304212  36384 tty2     Sl+  Oct27   4:11 /usr/lib/ Thu 29 Oct 2020 09:00:42 AM EDT
user+    1584  0.1  2.0 3626228 82152  ?       Ssl  Oct27   5:43 /usr/bin/ Thu 29 Oct 2020 09:00:42 AM EDT
user+    2096  0.7 14.6 4197076 587032 ?       Sl   Oct27  22:14 /usr/lib/ Thu 29 Oct 2020 09:00:42 AM EDT
user+    2248  0.5  8.4 3147328 340168 ?       Sl   Oct27  14:48 /usr/lib/ Thu 29 Oct 2020 09:00:42 AM EDT
user+    2272  1.0 14.6 3298264 587372 ?       Sl   Oct27  30:47 /usr/lib/ Thu 29 Oct 2020 09:00:42 AM EDT
user+   18658  0.1  0.0  12232  2468  pts/1    S+   Oct28   1:03 top       Thu 29 Oct 2020 09:00:42 AM EDT

我尝试使用 awk 来执行此操作,但是在执行命令“date”并将其作为参数传递给 awk 时,我得到了一些奇怪的结果。

这会添加一个带有“0”的列作为结果:

ps axu |awk 'NR==1 {print $0}; $3 > 0'|awk '{print $0, system(date) }'

这会在新行而不是新列中添加时间戳:

ps axu |awk 'NR==1 {print $0}; $3 > 0'|awk -v var1=date '{print $0 system(var1) }'

标签: linuxbashawk

解决方案


这会添加一个带有“0”的列作为结果:

ps axu |awk 'NR==1 {print $0}; $3 > 0'|awk '{print $0, system(date) }'

AWK 的系统确实返回命令的(在这种情况下date:)退出状态(在这种情况下:0即一切正常)。system如果您对命令的输出感兴趣,这不是正确的工具。

GNU AWK 有自己的时间函数,可以让你得到你想要的 -systime()自纪元开始以来提供第二个,strftime允许你将其格式化为人类可读的形式,例如,你可以得到 YYYYMMDD HH:MM:SSstrftime("%Y%m%d %H:%M:%S", systime())


推荐阅读