Добавить метку времени для каждой строки в команде вывода df? - PullRequest
0 голосов
/ 07 октября 2019

Я хотел бы добавить дату для каждой строки вывода df.

Я пытался:

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

... но это не работает.

Как мне добавить дату?

Ответы [ 3 ]

1 голос
/ 07 октября 2019

Вот альтернативный вариант:

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
$ 

А вот альтернативный вариант, печатая только те 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
$
1 голос
/ 07 октября 2019

Решение Perl.

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

Параметры командной строки:

  • -M: загрузить функцию strftime() из модуля POSIX
  • -a: Автоматическое разбиение входных записей на пробелах на @F
  • -l: удаление новых строк из ввода и добавление их к выводу
  • -p: помещение каждой входной записи в $_, выполнение кода изатем выведите $_
  • -e: запустить этот код для каждой входной записи

Код обновляется $_, объединяя дату (strftime("%Y-%M ", localtime)) с первыми тремя столбцами(@F[0 .. 2]) входной записи.

1 голос
/ 07 октября 2019

Вы можете использовать этот способ:

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

Мы используем -v dt=$(date "+%Y-%m"), чтобы выполнить команду даты в оболочке и передать ее awk в аргументе dt.

Есливы хотите только первые 3 столбца из df вывода команды, затем используйте:

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