Holen Sie sich den Dateisystemnamen und die Verwendung mit `df -h`

Holen Sie sich den Dateisystemnamen und die Verwendung mit `df -h`
 df -h | grep test | sed -e 's/*%.^ //g;s/.*[ ^I]//'

Ausgabe:

/prüfen
/test/drv0
/test/drv1
 df -h  | grep test  | cut -d '%' -f1 | sed -e 's/*%.^ //g;s/.*[ ^I]//'

Ausgabe:

10
20
15

Ich möchte wissen, wie ich diese Ausgaben wie folgt verbinden kann:

/Test 10
/test/drv0 20
/test/drv1 15

Kann mir jemand helfen?

Antwort1

df -P | sed -n '/test/s/.*[[:blank:]]\(.*\)%[[:blank:]]*\(.*\)/\2 \1/p'

(dabei wird davon ausgegangen, dass die Einhängepunktpfade keine %- oder Zeilenumbruchzeichen enthalten)

Antwort2

Ich denke, ungefähr so: Ich verstehe die ganze Frage allerdings nicht

df -h | awk '/test/{print $1" "$5}' | sed -e ':a;N;$!ba;s/\n/ /g' -e 's/%//g'

Da sich die Frage geändert hat, hier die aktualisierte Antwort

df -h | awk '/test/{print $1, +$5}'

Antwort3

df | awk '/test/ {print $1 " " $5}'

wird drucken

/test 10%
/test/drv0 20%
/test/drv1 15%

Antwort4

Dies ist keine gute Lösung für Ihre spezielle Situation (es funktioniert, ist aber unnötig komplex). Sie sollten die bereits bereitgestellten Antworten verwenden. Ich wollte nur ein weiteres Tool erwähnen, das sehr nützlich ist, wenn Sie die Ausgabe mehrerer Programme zusammenführen möchten paste:

DESCRIPTION
   Write  lines  consisting  of  the sequentially corresponding lines from
   each FILE, separated by TABs, to standard output.   With  no  FILE,  or
   when FILE is -, read standard input.

Kombiniert mit BashProzesssubstitutionkönnen Sie die Ausgabe Ihrer beiden Befehle wie folgt kombinieren:

$ paste  <(df -h | grep test | sed -e 's/*%.^ //g;s/.*[ ^I]//') \
       <(df -h  | grep test  | cut -d '%' -f1 | sed -e 's/*%.^ //g;s/.*[ ^I]//')
 /test 10
 /test/drv0 20
 /test/drv1 15

Oder um ein einfacheres Beispiel zu verwenden:

$ paste <(echo -e "a\nb\nc") <(echo -e "1\n2\n3")
a   1
b   2
c   3

verwandte Informationen