Étant donné la sous-chaîne suivante donnée obtenue à partir de la commande df /dev/sdb1 | tail -n 1
:
/dev/sdb1 1952971772 1441131032 511840740 74% /media/kaiman/ShareData
Je voudrais extraire 1952971772
et à 74%
partir de cette chaîne, l'utiliser dans un script bash.
Je sais que je pourrais utiliser des commandes de coupe ou quelque chose, mais cela ne fonctionnera plus si une taille change, par exemple.
J'ai également pensé à utiliser une expression régulière ou quelque chose, mais j'aimerais avoir l'approche la plus recommandée.
Merci d'avance!
command-line
bash
Nicolas DUVOISIN
la source
la source
df
en particulier? Dans ce dernier cas, vous pouvez spécifier explicitement des champs de sortie particuliers, par exempledf --output=pcent /dev/sdb1
cut
position du caractère en ligne, ce qui le rend défaillant lorsque la longueur de la ligne change avec les fluctuations de la taille du fichier. Je crois que vous pouvez direcut
de sélectionner une colonne2
et une colonne5
délimitées par des espaces, mais je suis au téléphone et je ne peux pas rechercher et publier efficacement une réponse.cut
verra une colonne après chaque délimiteur.Réponses:
pour le pourcentage et
pour la taille.
Sans
tail
:awk '{ print $2 }'
obtient la 2ème colonne où plusieurs séparateurs comptent pour 1. La 2ème colonne est donc toujours la même pour votre système pour la 1ère partie de la commande.
NR
vous donne le nombre total d'enregistrements en cours de traitement ou le numéro de ligne.la source
df /home | awk '{print $2; print $5;}'
.END
bloc donc au lieu d'utilisertail
simplement l' utilisationawk 'END { print $2,$5}'
Réponse modifiée
Comme l'a indiqué @kevin, vous pouvez utiliser
awk
pour sélectionner uniquement la dernière ligne et éviter d'utiliser du tout la queue en utilisantEND
et aussi si vous souhaitez imprimer deux colonnes à la fois, vous pouvez le faire:Réponse originale
Vous ne pouvez sélectionner que les 2e colonnes:
Où
$2
indique la position des colonnes séparées par TAB. Vous pouvez l'utilisercut
car il ne gère qu'une seule occurrence de TAB et ici il existe plusieurs TAB pour délimiter une colonne.la source
END
bloc donc au lieu d'utilisertail
simplement l' utilisationawk 'END { print $2,$5}'