FORUM Syndrome-OC - Jacky-PC


  Programmation


  Autre


  Aide pour un ptit script bash

 




Le salon de discussion : Ik12, 1 utilisateur anonyme et 5 utilisateurs inconnus

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Aide pour un ptit script bash

n°7085
bap
Recherche password !
Posté le 15-11-2006 à 23:57:44  profilanswer
 

J'aurais besoin d'aide pour un ptit script bash.

  

Je dispose d'un fichier de 20 lignes (10 couples nom/valeur) de la forme :

 


Nom1
entier1
Nom2
entier2
...

   


Et d'un autre de la forme (pas de limite de ligne/colonne) :

 


#    Nom1       Nom2        ...
1    valeur1   valeur1'    ...
2    valeur2    valeur2'    ...

 


Le but est de créer une nouvelle ligne dans le deuxième fichier en assignant la valeur correspondante à chaque nom.

 

Ici on aurait

  


#    Nom1       Nom2        ...
1    valeur1   valeur1'    ...
2    valeur2    valeur2'    ...
3    entier1    entier2     ...

  


Au niveau algorithme je pense faire comme ca :

  
Code :
  1. ouvrir fichier1
  2. ouvrir fichier 2
  3. pour i de 1 à 10
  4.     nom = ligne i du fichier1
  5.     valeur = ligne i+1 du fichier1
  6.     chercher si nom est présent dans la première ligne du fichier2
  7.  
  8. Si non => ajouter le nom au bout de la première ligne, ajouter 0 au
  9. bout des autres lignes, retenir le n° de la colonne de ce nom
  10.     Si oui => retenir le n° de la colonne de ce nom
  11.     Ajouter la valeur à la dernière ligne à la bonne colonne.
  12. fin du pour
  13. ajouter le numéro de la ligne à la dernière ligne, première colonne.
  14. fermer fichier1
  15. fermer fichier2
  


Maintenant il me faut traduire ca en bash  :/

  

Je pourrais aussi le faire en C, mais je trouve ca chiant de manipuler les chaines de caractère.

 

Doit bien y avoir des ptits utilitaires pour faire ca facilement avec un script bash.

  

J'aurais vu un truc du genre, j'ai pas testé mais vu que j'ai pas fait de bash depuis 6 mois ca doit forcement pas marcher  :D

Code :
  1. for i in $(seq 10)
  2. do   
  3.     nom = (cat fichier1 | awk 'NR==$i {print $1}')           
  4. #affecte la ième ligne à nom
  5.     valeur = (cat fichier1 | awk 'NR==($i+1) {print $1}')
  6. #affecte la (i+1)ème ligne à valeur
  7.    
  8.     colonne = -1
  9.     for j in $(seq (cat fichier2 | awk 'NR==1 {print NF }'))
  10. #de la 1ère à la dernière colonne
  11.     do
  12.         colonne = (cat fichier2 | awk '$j==$nom {print j }'))
  13. #colonne = numéro de la colonne ou le nom est égal
  14.     done
  15.    
  16. # A COMPLETER
  17. # PAS ENCORE FINI
  18. # DO NOT USE CA MARCHE PAS
  19. done
 


Si vous avez des commentaires déjà ou des idées pour faire plus simple, je suis prenneur


Message édité par bap le 15-11-2006 à 23:58:15
mood
Google
Posté le 15-11-2006 à 23:57:44  profilanswer
 

n°7086
Deadog
Dain Bramaged
Posté le 16-11-2006 à 00:10:14  profilanswer
 

fait plutôt un script awk, c'est largement fait pour ;)


Message édité par Deadog le 16-11-2006 à 00:11:00
n°7087
bap
Recherche password !
Posté le 16-11-2006 à 01:45:18  profilanswer
 

Je vais essayer, mais j'ai jamais fait du awk pur. Je suis adepte du awk en une ligne mais pas plus ^^

n°7090
bap
Recherche password !
Posté le 16-11-2006 à 14:16:23  profilanswer
 

Alors pour faire ca en awk il me faut :
 
1) lire le 1er fichier
2) pour chaque couple du 1er fichier faire un appel à awk
 
Mais est-ce qu'on peut affecter une valeur à un mot avec awk ?
Du genre $3 = "mon_mot" :??:
Il faut aussi que je trouve comment créer une nouvelle ligne avec awk. Je pense pas qu'avec FNR = FNR+1 ca marche ^^

n°7091
Deadog
Dain Bramaged
Posté le 16-11-2006 à 20:04:50  profilanswer
 

je dirais plutôt que awk lit le premier fichier ligne par ligne et se charge d'éditer le deuxième comme il faut
 
$3 = qqlch, oui tu peut faire
dans ce cas la ça remplace le 3ème mot de la ligne lu par une nouvelle valeur et la r&percute sur $0 (la ligne entière)
mais si tu fais comme je dis, t'en a rien à faire car tu vas éditer le 2ème fichier et non pas formaté une sortie (disons que tu utilise awk qu'à moitié [:matleflou])

mood
Google
Posté le 16-11-2006 à 20:04:50  profilanswer
 


Aller à :
Ajouter une réponse

  FORUM Syndrome-OC - Jacky-PC


  Programmation


  Autre


  Aide pour un ptit script bash

 

Hit Parade