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

 


Dernière réponse
Sujet : script de recherche
jlighty en awk:

Code :
  1. BEGIN{user_trouve=0 }
  2. {
  3. if ($1==user_a_analyser)
  4. {
  5.    user_trouve=1;
  6.    print $2;
  7. }
  8. }
  9. END {
  10. if (user_trouve==0)
  11. print "quota introuvable"
  12. }


appel :
awk -f 'find_quota.awk' -v user_a_analyser='user1'  quotas.txt  


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
jlighty en awk:

Code :
  1. BEGIN{user_trouve=0 }
  2. {
  3. if ($1==user_a_analyser)
  4. {
  5.    user_trouve=1;
  6.    print $2;
  7. }
  8. }
  9. END {
  10. if (user_trouve==0)
  11. print "quota introuvable"
  12. }


appel :
awk -f 'find_quota.awk' -v user_a_analyser='user1'  quotas.txt  

slash51 c'est bien ce qui me semblait le fgrep ne fait pas une recherche exacte  
pour user 1000
     user2 2000
     tempuser 3000
 
j'obtiens 1000  
          2000
          3000
il prend tous les noms qui contiennent user
jlighty

Citation :

quota=`cat <ton fichier> | fgrep <user> | awk '{print $2 }'`


oubli des guillemets  :ange:

jlighty et si tu fais fgrep "user " (à moins qu'il y ait des espaces dans le nom ce qui n'est pas trop unix-friendly)
<mon fichier> doit être remplacé par le chemin complet du fichier
deather2 quota=cat <ton fichier> | fgrep <user> | awk '{print $2 }'
 
Il faut plutôt faire:
quota=`cat <ton fichier> | fgrep <user> | awk '{print $2 }'`
slash51 il me dit line1 :<mon fichier> : command not found
 
de plus , fgrep ne fait pas une recherche exact il me semble
si j'ai user 1000 et user2 2000
et que je fais un fgrep user
il va m'afficher 1000 et 2000
jlighty # pas très compliqué surtout  :ange:  

Code :
  1. quota=`cat <ton fichier> | fgrep <user> | awk '{print $2 }'`
  2. if [ -z "$quota" ]; then
  3. echo "quota introuvable"
  4. else
  5. echo "$quota"
  6. fi

slash51 et pour faire une recherche dans ce même fichier alors ?
 
si je veux afficher le quota de user2 s'il existe
et afficher "quota introuvable" s'il l'utilisateur n'existe pas  
YupYup Je vais plus loin, et j'invente le &&& ! Aucune idée de ce que ça peut bien faire, mais c'est moi qui ai la plus grosse \o/
jlighty :D  pour que ça soit encore mieux un && comme ça si le script plante, il n'écrasera pas le fichier original
YupYup Et tu peux même remplacer le dernier ; par un &
jlighty il ne faut surtout pas que les noms soient identiques !
pourquoi ?
awk traite ton fichier ligne par ligne, à chaque ligne il retourne les modifications
 
tu n'as quà faire ça :
awk -f 'set_quota.awk' -v user_a_modifier='user1' -v valeur_quota='1000' quotas.txt > quotas_modifier.txt ; mv -f quotas_modifier.txt quotas.txt  
slash51 c'est normal que si <le fichier contenant les quotas et users> et fichier_config_modifier est le même je me retrouve plus qu'avec une seule ligne dans le fichier modifié  
 
j'ai fait :  
 
awk -f 'set_quota.awk' -v user_a_modifier='user1' -v valeur_quota='1000' quotas.txt > quotas.txt  
 
YupYup awk, ça traite des millions de lignes en quelques secondes. C'est réellement impressionnant, on devrait tous apprendre à s'en servir.
jlighty :ange: oui j'ai tapé un peu trop vite
slash51 il manque juste le % avant le s dans le printf et c'est bon
 
un vrai langage de programmation à lui tout seul ce awk
jlighty BEGIN : exécute des instructions dès le lancement du script
END : exécute des instructions à la fin du script
toutes les infos dans man awk
YupYup BEGIN est exécuté avant tout traitement sur les chaines, END à la fin. Voir la doc gawk pour plus d'infos.
slash51 BEGIN ... END , c'est interpreté comment par awk ?
jlighty j'ai fais quelques corrections ew_user -> new_user et j'ai retiré les étoiles
slash51 si c'est bon , une erreur dans mon script , merci ça marche
slash51 c'est quoi les étoiles avant chaque instruction ?  
je l'ai enlevé sinon ça s'execute pas  
 
mais il m'ajoute l'utilisateur en fin de fichier même si l'utilisateur existe deja
jlighty bon on va aranger ça

Code :
  1. BEGIN { new_user=1}
  2.   {
  3.     if ($1==user_a_modifier) 
  4.      {
  5.        new_user=0;
  6.      printf "%s %i\n",$1,valeur_quota;
  7.      }
  8.     else
  9.      print $0;
  10.  
  11.   }
  12. END {if (new_user==1)
  13. printf "%s %i\n",user_a_modifier,valeur_quota; }

slash51 oui ça marche si l'utilisateur existe mais s'il n'existe pas il ne me crée pas l'utilisateur
jlighty en awk un script dans ce style:

Code :
  1. {
  2. if ($1==user_a_modifier)
  3. {
  4. printf "%s %i\n",$1,valeur_quota;
  5. }
  6. else
  7. print $0;
  8. }


 
on le sauvegarde dans un fichier set_quota.awk
 
comment l'appeler :
awk -f 'set_quota.awk' -v user_a_modifier='<le user>' -v valeur_quota='<le quota>' <le fichier contenant les quotas et users>   > <le fichier contenant la modification>
 
ex:
awk -f 'set_quota.awk' -v user_a_modifier='user1' -v valeur_quota='1000' <le fichier contenant les quotas et users> > fichier_config_modifier
 
Edit : appel du script

slash51 salut , j'aimerais faire une recherche d'un utilisateur dans un fichier de config et lui définir un quota s'il n'existe pas ou lui changer son quota s'il existe
 
ex:  
user1 15000
user2 12000
 
set_quota user3 8000
-> user1 15000
   user2 12000
   user3 8000
 
set_quota user1 9000
-> user1 9000
   user2 12000
   user3 8000
 
comment faire ?

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)