Angesichts der folgenden Teilzeichenfolge, die mit dem Befehl erhalten wurde df /dev/sdb1 | tail -n 1
:
/dev/sdb1 1952971772 1441131032 511840740 74% /media/kaiman/ShareData
Ich möchte aus dieser Zeichenfolge extrahieren 1952971772
und 74%
sie in einem Bash-Skript verwenden.
Ich weiß, dass ich einige Schnittbefehle oder ähnliches verwenden könnte, aber es funktioniert nicht mehr, wenn sich beispielsweise die Größe ändert.
Ich hatte auch Gedanken über die Verwendung eines regulären Ausdrucks oder so, aber ich hätte gerne den am meisten empfohlenen Ansatz.
Danke im Voraus!
command-line
bash
Nicolas DUVOISIN
quelle
quelle
df
Besonderen? In letzteremdf --output=pcent /dev/sdb1
cut
Zeichenposition in der Zeile, wodurch sie fehlschlägt, wenn sich die Zeilenlänge mit Schwankungen der Dateigröße ändert. Ich glaube, Sie können festlegencut
, dass Spalte2
und Spalte5
durch Leerzeichen abgegrenzt werden sollen, aber ich telefoniere und kann keine Antwort recherchieren und effektiv veröffentlichen.cut
Nach jedem Trennzeichen wird eine Spalte angezeigt.Antworten:
für den Prozentsatz und
für die Größe.
Ohne die
tail
:awk '{ print $2 }'
Ruft die 2. Spalte ab, in der mehrere Trennzeichen als 1 zählen. Daher ist die 2. Spalte für Ihr System für den 1. Teil des Befehls immer dieselbe.
NR
gibt Ihnen die Gesamtzahl der verarbeiteten Datensätze oder die Zeilennummer an.quelle
df /home | awk '{print $2; print $5;}'
.END
Block, also anstatttail
nur zu verwendenawk 'END { print $2,$5}'
Antwort bearbeitet
Wie @kevin angegeben hat, können
awk
Sie nur die letzte Zeile auswählen und die Verwendung von tail vermeiden, indem Sie Folgendes verwenden.END
Wenn Sie zwei Spalten gleichzeitig drucken möchten, können Sie dies tun:Ursprüngliche Antwort
Sie können nur die 2. Spalte auswählen:
Wobei
$2
die Position von TAB-getrennten Spalten angibt. Sie können verwenden,cut
weil es nur ein Vorkommen von TAB behandelt und hier mehrere TABs zum Abgrenzen einer Spalte vorhanden sind.quelle
END
Block, also anstatttail
nur zu verwendenawk 'END { print $2,$5}'