Recuperando un valor específico de "df -h" usando shell

2

Cuando uso df -h, obtengo el siguiente resultado:

Tamaño del sistema de archivos utilizado Disponible Uso% montado en

/ dev / mapper / VolGroup00-LogVol00 59G 2.2G 54G 4% /

/ dev / sda1 122M 38M 78M 33% / boot

tmpfs 1.1G 0 1.1G 0% / dev / shm

10.10.0.105:/somepath

                   11T  8.4T  2.1T  81% /storage4

10.11.0.101:/somepath

                   15T  8.9T  5.9T  61% /storage1

/ dev / mapper / patha 5.0T 255G 4.8T 5% / storage5_vol0

/ dev / mapper / pathb 5.0T 195G 4.9T 4% / storage5_vol1

/ dev / mapper / pathc 5.0T 608G 4.5T 12% / storage5_vol2

Quiero escribir un script que obtenga el valor de la columna Avail en un almacenamiento específico.

Solía ​​usar

df -k / nombre_almacenamiento | cola -1 | awk '{print $ 3}'

Pero la columna FileSystem puede tener un valor o no ... lo que cambiaría la variable de mi script de $ 3 a $ 4.

¿Cómo puedo obtener Avail en una sola línea de comando incluso si no hay valores en las columnas anteriores?

Diego Dias
fuente
+1 pregunta interesante. En caso de que no obtenga ninguna respuesta aquí, puede estar interesado en el unix.SE por separado . Simplemente
marque
Por favor, no publique mensajes cruzados .
Dennis Williamson

Respuestas:

3

Simplemente active la salida compatible POSIX (-P) a df:

$ df -Pk /dev/sda1 | tail -n 1 | awk '{print $4}'

Eso asegura que el formato de cada línea sea el mismo (sin avance de línea después de nombres largos de dispositivo).

Majenko
fuente
Gracias. Eso es exactamente lo que necesitaba.
Diego Dias
2

Use la opción -P para df, para asegurarse de que la salida esté normalizada y no dividida en muchas líneas.

Y, de todos modos, también puede usar siempre $ (NF-2) para imprimir la columna disponible.


fuente
Gracias. Eso es exactamente lo que necesitaba. Elegí la respuesta de Matt Jenkins solo porque lo hizo primero.
Diego Dias
0

Trabaje fuera de la variable NF (número de campos). Algo como :

df -k / storage_name | tail -1 | awk 'NF == 6 {print $ 3}; NF == 5 {print $ 4}'

cbz
fuente
En cambio, puede simplemente {imprimir $ (NF-2)}
Funciona para la situación que tengo ahora. Pero no para uno genérico, donde no podría haber valores en más de una columna.
Diego Dias
0
df -k /dev | tail -1 | sed s/"^[^0-9]*"// | awk '{print $3}'

Agregar el sed eliminará todos los caracteres que no sean dígitos desde el comienzo de la línea. Es posible que deba modificarlo un poco si tiene dígitos en el nombre de su sistema de archivos

Hippy
fuente