Je voudrais une méthode pour capturer l'utilisation du disque d'une partition particulière, en utilisant le répertoire où la partition est montée. La sortie devrait simplement être un entier sans remplissage ni symbole, comme j'aimerais le sauvegarder dans une variable.
J'ai utilisé df --output=pcent /mount/point
, mais j'ai besoin de rogner la sortie car elle comporte un en-tête inutile, un espace de remplissage avant la valeur et un symbole% suivant la valeur:
Use%
83%
Dans ce cas, le résultat souhaité serait simplement 83
. Je ne suis au courant d'aucun inconvénient à utiliser le résultat de df
, mais je suis heureux d'accepter d'autres méthodes qui ne le reposent pas.
J'utiliserais ...
df --output=pcent /mount/point | tr -dc '0-9'
Je ne sais pas si sed est plus rapide, mais je ne me souviens jamais de ses valeurs.
Voici la solution awk:
$ df --output=pcent /mnt/HDD | awk -F'%' 'NR==2{print $1}'
37
En gros, ce qui se passe ici, c'est que nous traitons le caractère '%' comme séparateur de champ (séparateur de colonne) et n'imprimons la première colonne $ 1 que lorsque le nombre d'enregistrements est égal à deux (la partie NR==2
)
Si nous voulions utiliser des outils bash
- only, nous pourrions faire quelque chose comme ceci:
bash-4.3$ df --output=pcent / | while IFS= read -r line; do
> ((c++));
> [ $c -eq 2 ] && echo "${line%\%*}" ;
> done
74
Et pour le plaisir, alternative sed
via le groupe de capture et -r
pour les expressions rationnelles étendues:
df --output=pcent | sed -nr '/[[:digit:]]/{s/[[:space:]]+([[:digit:]]+)%/\1/;p}'
Vous pouvez diriger vers un grep
qui extrait uniquement les chiffres:
df --output=pcent /mount/point | grep -o '[0-9]*'
Voir en direct:
$ echo "Use%
> 83%" | grep -o '[0-9]*'
83
sed
solution
df --output=pcent /mount/point | sed '1d;s/^ //;s/%//'
1d
supprimer la première ligne;
pour séparer les commandess/^ //
supprime un espace au début des ligness/%//
remove %
signÉtant un peu fan de Borne Again (Borne Again Shell) l'année dernière, je pensais proposer une solution en l'utilisant.
$ DF_PCT=$(df --output=pcent /mnt/d)
$ echo ${DF_PCT//[!0-9]/}
5
df
sortie dans la variable DF_PCT
.DF_PCT
et l’affiche à l’écran.5
dans ce cas).Je suis tombé sur un serveur où --output = pcent n'était pas encore implémenté. J'ai donc utilisé la sortie normale, filtrée par colonne, suivie de la regex: df /mount/point | awk '{print $5}' | tr -dc '0-9'