¿Agregar marca de tiempo para cada línea en el comando de salida df?

2 minutos de lectura

avatar de usuario
Ezzmazz

Me gustaría agregar la fecha para cada línea de la df producción.

Lo intenté:

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

… pero no funciona.

¿Cómo puedo agregar la fecha?

  • esto es para linux o para aix?

    – glen jackman

    7 oct 2019 a las 14:24

  • AIX y Linux 🙂

    – Ezzmazz

    7 oct 2019 a las 14:29

  • Sugeriría que la solución de Dave Cross debería ser portátil en esas plataformas. Lo hace df -m dar el mismo resultado en Linux y AIX?

    – glen jackman

    7 oct 2019 a las 14:36


  • Es posible que desee considerar la -P opción a df para dar un formato de salida portátil/consistente.

    –Jeff Schaller

    8 oct 2019 a las 18:04

Aquí hay una alternativa:

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

Y aquí está el resultado del comando anterior:

$ 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
$ 

Y aquí hay una versión alternativa, imprimiendo solo las 3 columnas que querías en el OP:

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

Y la salida correspondiente:

$ 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() es una extensión awk de GNU. ¿Disponible en AIX?

    – glen jackman

    7 oct 2019 a las 14:35

  • @glennjackman, es un buen punto y el OP debe tenerlo en cuenta.

    – accdías

    7 oct 2019 a las 14:42

avatar de usuario
anubhava

Puede usar de esta manera:

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

Usamos -v dt=$(date "+%Y-%m") para ejecutar el comando de fecha en shell y pasarlo a awk en una discusión dt.

Si desea solo las primeras 3 columnas de df salida del comando y luego use:

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

avatar de usuario
dave cruz

Una solución de Perl.

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

Opciones de la línea de comandos:

  • -M : Carga elstrftime() función desde el módulo POSIX
  • -a: divide automáticamente los registros de entrada en espacios en blanco en @F
  • -l: elimina las líneas nuevas de la entrada y las agrega a la salida
  • -p: coloca cada registro de entrada en $_ejecuta el código y luego imprime $_
  • -e: ejecuta este código para cada registro de entrada

El código se actualiza $_ concatenando la fecha (strftime("%Y-%M ", localtime)) con las tres primeras columnas (@F[0 .. 2]) del registro de entrada.

  • querrás '$_ = join(";", strftime("%Y-%m", localtime), @F[0..2])' para obtener la salida deseada de OP.

    – glen jackman

    7 oct 2019 a las 14:35

¿Ha sido útil esta solución?