【问题标题】:Add timestamp for each line on the df output command?为 df 输出命令的每一行添加时间戳?
【发布时间】:2020-02-04 20:28:55
【问题描述】:

我想为df 输出的每一行添加日期。

我试过了:

df -m | awk '{print `date +%Y-%m`";"$1";"$2";"$3 }'

...但它不起作用。

如何添加日期?

【问题讨论】:

  • 这是linux 还是aix
  • AIX 和 Linux :)
  • 我建议Dave Cross's solution 应该可以在这些平台上移植。 df -m 在 Linux 和 AIX 上是否提供相同的输出?
  • 您可能需要考虑将-P 选项设置为df 以提供可移植/一致的输出格式。

标签: linux date aix linux-disk-free


【解决方案1】:

这是另一种选择:

df -m | awk '{print strftime("%Y-%m"), $0}'

这是上面命令的输出:

$ df -m | awk '{print strftime("%Y-%m"), $0}'
2019-10 Filesystem                     1M-blocks   Used Available Use% Mounted on
2019-10 devtmpfs                            9852      0      9852   0% /dev
2019-10 tmpfs                               9871    132      9740   2% /dev/shm
2019-10 tmpfs                               9871      2      9869   1% /run
2019-10 /dev/mapper/fedora_canvas-root     50141  14731     32834  31% /
2019-10 tmpfs                               9871      1      9871   1% /tmp
2019-10 /dev/sda5                            976    243       667  27% /boot
2019-10 /dev/mapper/fedora_canvas-home   1277155 217435    994777  18% /home
2019-10 tmpfs                               1975     63      1912   4% /run/user/1000
$ 

这是一个替代版本,只在 OP 上打印您想要的 3 列:

df -m | awk '{print strftime("%Y-%m"), $1, $2, $3}' | column -t

以及对应的输出:

$ df -m | awk '{print strftime("%Y-%m"), $1, $2, $3}' | column -t
2019-10  Filesystem                      1M-blocks  Used
2019-10  devtmpfs                        9852       0
2019-10  tmpfs                           9871       132
2019-10  tmpfs                           9871       2
2019-10  /dev/mapper/fedora_canvas-root  50141      14731
2019-10  tmpfs                           9871       1
2019-10  /dev/sda5                       976        243
2019-10  /dev/mapper/fedora_canvas-home  1277155    217435
2019-10  tmpfs                           1975       63
$

【讨论】:

  • strftime() 是 GNU awk 扩展。在 AIX 上可用?
  • @glennjackman,这是一个很好的观点,OP 必须考虑到这一点。
【解决方案2】:

你可以这样使用:

df -m | awk -v dt=$(date "+%Y-%m") '{print dt "::", $0}'

我们使用-v dt=$(date "+%Y-%m") 在shell 中执行日期命令,并在参数dt 中将其传递给awk

如果您只想要 df 命令输出的前 3 列,请使用:

df -m | awk -v dt=$(date "+%Y-%m") '{print dt, $1, $2, $3}'

【讨论】:

    【解决方案3】:

    Perl 解决方案。

    df -m | perl -MPOSIX=strftime -alpe '$_ = strftime("%Y-%M ", localtime) . "@F[0..2]"'
    

    命令行选项:

    • -M : 从 POSIX 模块加载strftime() 函数
    • -a : 将空格上的输入记录自动拆分为@F
    • -l :​​ 从输入中删除换行符并将它们添加到输出中
    • -p : 将每条输入记录放入$_,执行代码然后打印$_
    • -e : 为每个输入记录运行此代码

    代码通过将日期 (strftime("%Y-%M ", localtime)) 与输入记录的前三列 (@F[0 .. 2]) 连接起来来更新 $_

    【讨论】:

    • 你会希望'$_ = join(";", strftime("%Y-%m", localtime), @F[0..2])' 得到 OP 想要的输出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    相关资源
    最近更新 更多