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

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [RESOLU] problème script et commande awk

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU] problème script et commande awk

n°1737089
kiell
Posté le 26-05-2008 à 11:24:27  profilanswer
 

Bonjour  :hello:  
J'ai un petit problème avec un script que j'ai fait qui permet la création d'utilisateur à partir de données présentes dans un fichier texte.
Je m'explique, voilà la partie de mon script qui récupère les différentes données du fichier :
 

Code :
  1. u=$(cat -b $1 | grep $cpt | awk '{ print $4 }');
  2. echo "utilisateur " $u
  3. nom=$(cat -b $1 | grep $cpt | awk '{ print $2 }');
  4. echo "nom " $nom
  5. prenom=$(cat -b $1 | grep $cpt | awk '{ print $3 }');
  6. echo "prenom " $prenom
  7. mot=$(cat -b $1 | grep $cpt | mawk '{ print $5 }');
  8. echo "mdp " $mot


 
$1 est le nom du fichier passé en paramètre.
$cpt est un compteur qui permet de se déplacer ligne par ligne dans le fichier.
 
Le fichier texte est de cette forme :
 

Code :
  1. nom1 prenom1 login1 mdp1
  2. nom2 prenom2 login2 mdp2
  3. nom3 prenom3 login3 mdp3
  4. ...


 
Le mot de passe est un nombre à 7 caractères, et c'est ça justement qui ne va pas.
Quand j'exécute mon script je me rend compte que les variable ne contiennent pas du tout ce que je voudrais.
ça donne un truc du genre :
 

Code :
  1. utilisateur : login1 login2 login3
  2. nom : nom1 nom2 nom3
  3. prenom : prenom1 prenom2 prenom3
  4. mdp : mdp1 mdp2 mdp3


 
En mettant des chaines de caractères comme mot de passe (et pas des chiffres) ça fonctionne très bien, pour chaque ligne (à chaque exécution de ma bouche while), on récupère bien les renseignement de l'utilisateur de la ligne parcourue.
ça fonctionne aussi avec certains nombres (1111111 ou 2222222 par exemple).
 
Quelqu'un aurait une idée pour résoudre mon problème ?
Je suis assez novice en script shell, je n'utilise peut être pas les bonnes commandes  :sarcastic:  
Merci  :jap:


Message édité par kiell le 27-05-2008 à 12:29:31
mood
Publicité
Posté le 26-05-2008 à 11:24:27  profilanswer
 

n°1737181
matafan
Posté le 26-05-2008 à 13:48:08  profilanswer
 

Heu tu sais qu'avec awk tu peux faire autre choses que des '{ print $1 }' hein ? Par exemple :

awk '{ print "utilisateur : " $3 "\nnom : " $1 "\nprenom : " $2 "mdp : " $4 }'


Ou bien, si tu as vraiment besoin de passer par ton compteur cpt :

awk -v cpt=$cpt 'NR == cpt { print "utilisateur : " $3 "\nnom : " $1 "\nprenom : " $2 "mdp : " $4 }'

n°1737306
kiell
Posté le 26-05-2008 à 16:57:04  profilanswer
 

Vi vi je savais pour awk, mais j'ai fait de cette façon car je réutilise les variable plus loin dans mon script, donc faut qu'elle contiennent que les valeurs qui m'intéresse (pas "utilisateur" ou "prenom" devant) ;)
 
Donc en prenant la deuxième commande que tu m'a donné et en l'adaptant à mon script ça fonctionne maintenant, je n'ai plus de problème quand il récupère les données.
Mais je me demande pourquoi en fait ^^
C'est cette partie là qui permet que ça fonctionne correctement non ?

Code :
  1. -v cpt=$cpt 'NR == cpt


 
En tout cas, merci pour ton aide matafan ;)


Message édité par kiell le 26-05-2008 à 16:57:30
n°1737308
matafan
Posté le 26-05-2008 à 17:01:26  profilanswer
 

-v toto=tata ca définie dans awk une variable "toto" mise à la valeur "tata". Donc -v cpt=$cpt ça définit dans awk une variable awk "cpt" mise à la valeur de ta variable d'environement $cpt.
 
NR c'est le numéro de "record", qui est en fait le numéro de ligne puisque par défaut un "record" c'est une ligne.

n°1737312
matafan
Posté le 26-05-2008 à 17:07:36  profilanswer
 

Ah et puis dans ce cas, fait un truc comme ça, ça sera plus efficace :

cat txt | while read nom prenom login mdp
do
    echo -e "$login\n$nom\n$prenom\n$mdp"
    ...
done


Message édité par matafan le 26-05-2008 à 17:07:49
n°1737688
kiell
Posté le 27-05-2008 à 12:28:58  profilanswer
 

Exact, ça fonctionne aussi comme ça :)
Encore merci Matafan  :jap:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [RESOLU] problème script et commande awk

 

Sujets relatifs
Problème d'insertion dans une table sous ACCESSProblème requête
[Résolu] Lettres accentuées et substitutionChdir, problème de droit
Probleme de changement de fond d'écrans avec CSSProbleme affichage IE
Petit probleme de denombrement[Resolu] Enregistrer un fichier sous.....
Lancement script PHP depuis script PERLScript MySQL vers Oracle
Plus de sujets relatifs à : [RESOLU] problème script et commande awk


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