Biorąc pod uwagę następujący podciąg otrzymany z polecenia df /dev/sdb1 | tail -n 1
:
/dev/sdb1 1952971772 1441131032 511840740 74% /media/kaiman/ShareData
Chciałbym wyodrębnić 1952971772
i 74%
z tego ciągu, aby użyć go w skrypcie bash.
Wiem, że mógłbym użyć niektórych poleceń cięcia lub czegoś takiego, ale to nie będzie działać, jeśli na przykład zmieni się rozmiar.
Miałem też przemyślenia na temat użycia wyrażenia regularnego lub czegoś takiego, ale chciałbym mieć najbardziej zalecane podejście.
Z góry dziękuję!
command-line
bash
Nicolas DUVOISIN
źródło
źródło
df
w szczególności o? Jeśli to drugie, możesz podać konkretne pola wyjściowe, np.df --output=pcent /dev/sdb1
cut
na pozycji znaku w linii, co powoduje, że zawodzi, gdy długość linii zmienia się wraz ze zmianami wielkości pliku. Wierzę, że możesz powiedzieć,cut
aby wybrać kolumnę2
i kolumnę5
wyznaczoną spacjami, ale rozmawiam przez telefon i nie mogę zbadać ani skutecznie opublikować odpowiedzi.cut
zobaczy każdą kolumnę po każdym separatorze.Odpowiedzi:
dla procentu i
dla rozmiaru.
Bez
tail
:awk '{ print $2 }'
pobiera drugą kolumnę, w której wiele separatorów liczy się jako 1. Tak więc druga kolumna jest zawsze taka sama dla twojego systemu dla pierwszej części polecenia.
NR
daje całkowitą liczbę przetwarzanych rekordów lub numer linii.źródło
df /home | awk '{print $2; print $5;}'
.END
bloku, więc zamiast używaćtail
po prostu użyjawk 'END { print $2,$5}'
Edytowana odpowiedź
Jak stwierdził @kevin, możesz użyć,
awk
aby wybrać tylko ostatnią linię i w ogóle uniknąć używania ogona za pomocą,END
a także, jeśli chcesz wydrukować dwie kolumny na raz, możesz to zrobić:Oryginalna odpowiedź
Możesz wybrać tylko 2 kolumny:
Gdzie
$2
wskazuje pozycję kolumn oddzielonych TAB. Możesz użyć,cut
ponieważ obsługuje tylko jedno wystąpienie TAB, a tutaj jest wiele tabulatorów do rozdzielania kolumny.źródło
END
bloku, więc zamiast używaćtail
po prostu użyjawk 'END { print $2,$5}'