Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
749 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [résolu] Parser le résultat de la commande df

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[résolu] Parser le résultat de la commande df

n°1468628
Movez LanG
....huhu....
Posté le 10-10-2021 à 11:19:34  profilanswer
 

Bonjour à tous,
 
Je sollicite votre aide car, débutant en script shell, je me casse les dents sur un truc de m***** depuis 2 jours.
Je ne demande surtout pas de code tout prêt mais le bon raisonnement pour essayer ensuite par moi-même.
 
J'ai une 100aine de serveurs dont j'assure l'exploitation.
Suite à une opération particulière, il m'a fallu m'assurer de la config. avant et après.
 
J'ai donc sauvegardé, en autres choses, les infos relatives aux points de montage par un df.
Si un diff devrait suffire à comparer l'avant à l'après, j'ai besoin de nettoyer un peu les fichiers avant.
 
Un peu de concret maintenant :
 

Citation :

---------------- nom_serveur --------------
Sys. de fichiers                Taille Utilisé Dispo Uti% Monté sur
/dev/mapper/vg00-lvroot           5,0G    2,0G  3,1G  39% /
devtmpfs                          126G       0  126G   0% /dev
tmpfs                             126G     47G   79G  38% /dev/shm
tmpfs                             126G    2,5M  126G   1% /run
tmpfs                             126G       0  126G   0% /sys/fs/cgroup
/dev/sda1                         509M    172M  337M  34% /boot
/dev/mapper/vg00-lvvar             15G    281M   15G   2% /var
/dev/mapper/vg00-lvtmp            4,0G     33M  4,0G   1% /tmp
/dev/mapper/vg00-lvproduits       509M     27M  483M   6% /produits
/dev/mapper/vg00-lvORAu02oracle    20G    4,3G   16G  22% /u02/oracle
/dev/mapper/vg00-lvTINproduct     4,0G    825M  3,2G  21% /tina/product
/dev/mapper/vg00-lvdatapartage     60G     33M   60G   1% /data/partage
/dev/mapper/vg00-lvapp            509M     26M  483M   6% /app
/dev/mapper/vg00-lvexploit        5,0G     33M  5,0G   1% /exploit
/dev/mapper/vg00-lvORAu01oracle    32G     15G   18G  45% /u01/oracle
/dev/mapper/vg00-lvvarlog         5,0G    1,3G  3,8G  26% /var/log
/dev/mapper/vg01-lvbase           120G    4,9G  116G   5% /base
/dev/mapper/vg01-lvbasedump       800G    541G  260G  68% /base/dump
tmpfs                              26G       0   26G   0% /run/user/500
tmpfs                              26G       0   26G   0% /run/user/1030


 
Je souhaite garder la ligne correspond au nom du serveur et ensuite jusque la colonne "Sys. de fichiers" et "Monté sur".
 
Vous l'aurez compris, si j'ai été suffisamment clair, qu'il y a une certaine de pavés de ce type dans mon fichier.
 
J'ai donc essayé de faire :
while read line; do if [[ "$line" == ^-----* ]]; then echo -e "$line" ; else awk '{print $1,$6}'; fi; done < 20211008_df_avant_arret.txt
 
et évidemment ce n'est pas du tout ça  :pt1cable:  :pt1cable:  
 
Merci à tous ceux qui auront pris le temps de me lire et encore plus à ceux qui auront pu m'aider  :hello:


Message édité par Movez LanG le 10-10-2021 à 18:44:03
mood
Publicité
Posté le 10-10-2021 à 11:19:34  profilanswer
 

n°1468629
Fork Bomb
Obsédé textuel
Posté le 10-10-2021 à 11:34:40  profilanswer
 

Si tu souhaites ne sélectionner que certaines colonnes, awk doit pouvoir t’aider.


---------------
Décentralisons Internet-Bépo-Troll Bingo - "Pour adoucir le mélange, pressez trois quartiers d’orange !"
n°1468630
Movez LanG
....huhu....
Posté le 10-10-2021 à 11:40:09  profilanswer
 

J'ai tenté après le else :) mais le résultat est tout dé-structuré et la première ligne avec le nom du serveur pas du tout de la forme attendue ...


---------------
<3 lili - http://realkoala.labrute.fr Venez me défier !!
n°1468632
regdub
Posté le 10-10-2021 à 14:01:13  profilanswer
 

Si tu débutes en shell, faire tout dans awk serait peut-être plus facile. Et en plus, c'est fait pour.


---------------
Legalize it @HFR
n°1468633
Movez LanG
....huhu....
Posté le 10-10-2021 à 14:20:20  profilanswer
 

Bon bah ok, c'est vous qui savez :)
Je ne connaissais pas du tout la puissance de awk et j'imaginais ne pas pouvoir faire ce que je voulais.
 
Je regarde donc plus en détails cette commande.
 
Merci de vos conseils


---------------
<3 lili - http://realkoala.labrute.fr Venez me défier !!
n°1468635
kajoux
Posté le 10-10-2021 à 16:32:23  profilanswer
 

Effectivement awk est plus fait pour ce genre de choses, mais tu n'étais pas mal parti en shell.
À condition de rester en shell tout du long, et de ne pas mélanger pattern matching et regex.
Voilà un truc qui marche, où on saute en plus la seconde ligne qui est probablement sans intérêt :

while read line; do if [[ $line == ----* ]]; then echo "$line"; read line; else echo "${line%% *},${line##* }"; fi; done <20211008_df_avant_arret.txt

n°1468637
Movez LanG
....huhu....
Posté le 10-10-2021 à 18:40:39  profilanswer
 

Merci beaucoup pour ta soluce.
J'ai creusé cette après-midi la piste awk et j'ai fait :
 

Citation :

awk '$1 ~ /^----*/ {print $1,$2,$3} $NF ~ /^\// {print $1,$NF}' 20211008_df_apres_arret.txt


 
Il me reste des cas non gérés mais j'arrête là pour aujourd'hui. C'est quand même le week-end :)
 
Je mets le topic en résolu.
Encore merci.


Message édité par Movez LanG le 10-10-2021 à 18:41:23

---------------
<3 lili - http://realkoala.labrute.fr Venez me défier !!
n°1468638
kajoux
Posté le 10-10-2021 à 19:12:17  profilanswer
 

Petite amélioration, surtout de style (donc subjectif) :

awk '/^---/; $NF ~ "^/"{print $1,$NF}' 20211008_df_apres_arret.txt


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [résolu] Parser le résultat de la commande df

 

Sujets relatifs
Envoyer le résultat de la commande scp par mail[Bash] Passer un argument dans l'execution d'une commande à distance
Enregistreur de macro/commandeAgrandir la partition root en ligne de commande
disque dur mourant? - analyse résultat smartmontools [résolu]commande unix/linux création fichiers selon liste
Question sur le partitionement en ligne de commande[résolu] Commande pour défragmenter
script montage lecteur réseau apres commande kinit 
Plus de sujets relatifs à : [résolu] Parser le résultat de la commande df


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR