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?
Respuestas:
Simplemente active la salida compatible POSIX (-P) a df:
Eso asegura que el formato de cada línea sea el mismo (sin avance de línea después de nombres largos de dispositivo).
fuente
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
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}'
fuente
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
fuente