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

  FORUM HardWare.fr
  Linux et OS Alternatifs

  script de recherche

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

script de recherche

n°675890
slash51
Posté le 11-05-2005 à 09:16:51  profilanswer
 

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 ?

mood
Publicité
Posté le 11-05-2005 à 09:16:51  profilanswer
 

n°675899
jlighty
Posté le 11-05-2005 à 09:27:47  profilanswer
 

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


Message édité par jlighty le 11-05-2005 à 10:00:51
n°675948
slash51
Posté le 11-05-2005 à 10:14:21  profilanswer
 

oui ça marche si l'utilisateur existe mais s'il n'existe pas il ne me crée pas l'utilisateur

n°675952
jlighty
Posté le 11-05-2005 à 10:17:11  profilanswer
 

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; }


Message édité par jlighty le 11-05-2005 à 12:26:58
n°675959
slash51
Posté le 11-05-2005 à 10:22:42  profilanswer
 

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

n°675962
slash51
Posté le 11-05-2005 à 10:24:39  profilanswer
 

si c'est bon , une erreur dans mon script , merci ça marche

n°675963
jlighty
Posté le 11-05-2005 à 10:24:48  profilanswer
 

j'ai fais quelques corrections ew_user -> new_user et j'ai retiré les étoiles


Message édité par jlighty le 11-05-2005 à 10:25:03
n°675970
slash51
Posté le 11-05-2005 à 10:28:31  profilanswer
 

BEGIN ... END , c'est interpreté comment par awk ?

n°675971
YupYup
Non.
Posté le 11-05-2005 à 10:30:22  profilanswer
 

BEGIN est exécuté avant tout traitement sur les chaines, END à la fin. Voir la doc gawk pour plus d'infos.


---------------
"The marketing guys said the HP-35 would be a failure because it was too small, and then we couldn't make them fast enough to meet the demand. The marketing folks don't know everything." - Bill Hewlett
n°675973
jlighty
Posté le 11-05-2005 à 10:30:39  profilanswer
 

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

mood
Publicité
Posté le 11-05-2005 à 10:30:39  profilanswer
 

n°675978
slash51
Posté le 11-05-2005 à 10:34:09  profilanswer
 

il manque juste le % avant le s dans le printf et c'est bon
 
un vrai langage de programmation à lui tout seul ce awk


Message édité par slash51 le 11-05-2005 à 10:35:29
n°675980
jlighty
Posté le 11-05-2005 à 10:35:23  profilanswer
 

:ange: oui j'ai tapé un peu trop vite


Message édité par jlighty le 11-05-2005 à 10:35:32
n°675986
YupYup
Non.
Posté le 11-05-2005 à 10:41:23  profilanswer
 

awk, ça traite des millions de lignes en quelques secondes. C'est réellement impressionnant, on devrait tous apprendre à s'en servir.


---------------
"The marketing guys said the HP-35 would be a failure because it was too small, and then we couldn't make them fast enough to meet the demand. The marketing folks don't know everything." - Bill Hewlett
n°676002
slash51
Posté le 11-05-2005 à 10:54:10  profilanswer
 

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  
 

n°676006
jlighty
Posté le 11-05-2005 à 10:56:38  profilanswer
 

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  


Message édité par jlighty le 11-05-2005 à 10:58:02
n°676011
YupYup
Non.
Posté le 11-05-2005 à 10:59:13  profilanswer
 

Et tu peux même remplacer le dernier ; par un &


---------------
"The marketing guys said the HP-35 would be a failure because it was too small, and then we couldn't make them fast enough to meet the demand. The marketing folks don't know everything." - Bill Hewlett
n°676012
jlighty
Posté le 11-05-2005 à 10:59:54  profilanswer
 

:D  pour que ça soit encore mieux un && comme ça si le script plante, il n'écrasera pas le fichier original


Message édité par jlighty le 11-05-2005 à 11:00:13
n°676015
YupYup
Non.
Posté le 11-05-2005 à 11:01:01  profilanswer
 

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/


---------------
"The marketing guys said the HP-35 would be a failure because it was too small, and then we couldn't make them fast enough to meet the demand. The marketing folks don't know everything." - Bill Hewlett
n°676200
slash51
Posté le 11-05-2005 à 14:06:45  profilanswer
 

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  

n°676205
jlighty
Posté le 11-05-2005 à 14:16:11  profilanswer
 

# 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


Message édité par jlighty le 11-05-2005 à 14:41:13
n°676221
slash51
Posté le 11-05-2005 à 14:26:28  profilanswer
 

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

n°676223
deather2
Posté le 11-05-2005 à 14:31:41  profilanswer
 

quota=cat <ton fichier> | fgrep <user> | awk '{print $2 }'
 
Il faut plutôt faire:
quota=`cat <ton fichier> | fgrep <user> | awk '{print $2 }'`

n°676226
jlighty
Posté le 11-05-2005 à 14:32:38  profilanswer
 

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


Message édité par jlighty le 11-05-2005 à 14:38:23
n°676229
jlighty
Posté le 11-05-2005 à 14:33:37  profilanswer
 

Citation :

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


oubli des guillemets  :ange:

n°676233
slash51
Posté le 11-05-2005 à 14:40:17  profilanswer
 

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


Message édité par slash51 le 11-05-2005 à 14:41:49
n°676235
jlighty
Posté le 11-05-2005 à 14:43:36  profilanswer
 

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  


Message édité par jlighty le 11-05-2005 à 14:45:46
mood
Publicité
Posté le   profilanswer
 


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

  script de recherche

 

Sujets relatifs
Lancer la Konsole en root avec un script sh ?dmg2iso > script perl foireux : besoin d'aide
[linux debuggeur] avis de recherche[linux debuggeur] avis de recherche
[linux+emacs+script+modèle] question lecture de fichier[Réglé] Script pour transformer .wav en .ogg à partir d'un répertoire
Recherche un script coordonne sourisA la recherche d un script iptables
[script] Recherche de fichiersrecherche bon tutorial pour script bash
Plus de sujets relatifs à : script de recherche


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