我想为df输出命令的每一行添加日期。
我尝试:
df -m | awk '{print `date +%Y-%m`";"$1";"$2";"$3 }'
但是它不起作用...
任何想法?
您可以使用这种方式:
df -m | awk -v dt=$(date "+%Y-%m") '{print dt "::", $0}'
[我们使用-v dt=$(date "+%Y-%m")
在shell中执行日期命令,并将其通过参数awk
传递给dt
。
如果只需要df
命令输出的前三列,请使用:
df -m | awk -v dt=$(date "+%Y-%m") '{print dt "::", $1, $2, $3}'
这里是替代方法:
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
$
Perl解决方案。
df -m | perl -MPOSIX=strftime -alpe '$_ = strftime("%Y-%M ", localtime) . "@F[0..2]"'
命令行选项:
strftime()
功能@F
$_
,执行代码,然后打印$_
代码通过将日期($_
与输入记录的前三列(strftime("%Y-%M ", localtime)
)连接在一起来更新@F[0 .. 2]
。