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?
Odpowiedzi:
Po prostu włącz wyjście zgodne z POSIX (-P) do df:
To gwarantuje, że format każdej linii jest taki sam (brak podawania linii po długich nazwach urządzeń).
źródło
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
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 $}
źródło
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
źródło