J'utilise la commande df
dans un script bash:
df . -B MB | tail -1 | awk {'print $4'} | grep .[0-9]*
Ce script renvoie:
99%
Mais je n'ai besoin que de chiffres (pour faire la comparaison suivante). Si j'utilise l'expression grep
sans le point:
df . -B MB | tail -1 | awk {'print $4'} | grep .[0-9]*
Je ne reçois rien. Comment réparer?
Si tu essayes:
echo "99%" |grep -o '[0-9]*'
Il renvoie:
99
Voici les détails sur le -o
(ou --only-matching
flag) fonctionne depuis la page de manuel grep .
Imprimer uniquement les parties correspondantes (non vides) des lignes correspondantes, chacune de ces parties sur une ligne de sortie distincte. Les lignes de sortie utilisent les mêmes délimiteurs en entrée et les délimiteurs sont des octets nuls si -z (--null-data) est également utilisé (voir Autres options ).
grep
imprimera tout lignes correspondant au motif que vous fournissez. Si vous souhaitez uniquement imprimer la partie de la ligne qui correspond au motif, vous pouvez passer l'option - o:
- o, --only-matching Imprime uniquement les parties correspondantes (non vides) d'une ligne correspondante, chacune de ces parties sur une ligne de sortie distincte.
Comme ça:
echo 'Here is a line mentioning 99% somewhere' | grep -o '[0-9]+'
Que diriez-vous:
df . -B MB | tail -1 | awk {'print $4'} | cut -d'%' -f1
Pas besoin d'utiliser grep ici, essayez ceci:
df . -B MB | tail -1 | awk {'print substr($5, 1, length($5)-1)'}
function getPercentUsed() {
$sys = system("df -h /dev/sda6 --output=pcent | grep -o '[0-9]*'", $val);
return $val[0];
}
N'utilisez pas plus de commandes que nécessaire, laissez la queue, grep et cut. Vous pouvez le faire avec seulement (un simple) awk
PS: donner une taille de bloc en impression uniquement de persentage est un peu idiot ;-) Alors laissez aussi de côté le "-B MB"
df. | awk -F '[séparateurs de champs multiples]' '$ NF == "Le dernier champ doit être exactement -> patition montée" {print $ (NF --- numéro du dernier champ)} '
dans votre cas, utilisez:
df . |awk -F'[ %]' '$NF=="/" {print $(NF-2)}'
sortie: 81
Si vous souhaitez afficher le symbole de pourcentage, vous pouvez laisser le -F '[%]' éloigné et votre champ d'impression reculera d'un champ plus loin
df . |awk '$NF=="/" {print $(NF-1)}'
sortie: 81%