Pobieranie określonej wartości z „df -h” za pomocą powłoki

2

Kiedy używam df -h, otrzymuję następujące dane wyjściowe:

Używany system plików Dostępny Wykorzystaj% Zamontowany na

/ 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

Chcę napisać skrypt, który pobiera wartość kolumny Dostępność w określonym magazynie.

zwykłem używać

df -k / nazwa_pamięci | ogon -1 | awk „{drukuj 3 $}”

Ale kolumna FileSystem może mieć wartość lub nie ... co zmieniłoby zmienną mojego skryptu z 3 $ na 4 $.

Jak mogę uzyskać Dost na jednej linii poleceń, nawet jeśli nie ma żadnych wartości na poprzednich kolumn?

Diego Dias
źródło
+1 interesujące pytanie. W przypadku, gdy nie otrzymasz żadnej odpowiedzi tutaj może być zainteresowany w osobnym unix.SE . Po prostu zaznacz mod, aby migrować to pytanie
Tobias Kienzler
Proszę nie przesyłać pocztą .
Dennis Williamson

Odpowiedzi:

3

Po prostu włącz wyjście zgodne z POSIX (-P) do df:

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

To gwarantuje, że format każdej linii jest taki sam (brak podawania linii po długich nazwach urządzeń).

Majenko
źródło
Dzięki. Właśnie tego potrzebowałem.
Diego Dias,
2

Użyj opcji -P do df, aby upewnić się, że dane wyjściowe są znormalizowane i nie są podzielone na wiele wierszy.

Poza tym możesz zawsze użyć $ (NF-2), aby wydrukować dostępną kolumnę.


źródło
Dzięki. Właśnie tego potrzebowałem. Wybrałem odpowiedź Matta Jenkinsa tylko dlatego, że zrobił to pierwszy.
Diego Dias,
0

Pracuj ze zmienną NF (liczba pól). Coś jak :

df -k / nazwa_pamięci | ogon -1 | awk 'NF == 6 {wydruk 3 $}; NF == 5 {wydruk 4 $}

cbz
źródło
Zamiast tego może po prostu {wydrukować $ (NF-2)}
Działa w obecnej sytuacji. Ale nie dla ogólnej, w której nie może być wartości w więcej niż jednej kolumnie.
Diego Dias,
0
df -k /dev | tail -1 | sed s/"^[^0-9]*"// | awk '{print $3}'

Dodanie sed spowoduje usunięcie wszystkich znaków innych niż cyfry z początku wiersza. Być może trzeba będzie go nieco zmodyfikować, jeśli w nazwie systemu plików znajdują się cyfry

Hippy
źródło