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 :
- ouvrir fichier1
- ouvrir fichier 2
- pour i de 1 à 10
- nom = ligne i du fichier1
- valeur = ligne i+1 du fichier1
- chercher si nom est présent dans la première ligne du fichier2
-
- Si non => ajouter le nom au bout de la première ligne, ajouter 0 au
- bout des autres lignes, retenir le n° de la colonne de ce nom
- Si oui => retenir le n° de la colonne de ce nom
- Ajouter la valeur à la dernière ligne à la bonne colonne.
- fin du pour
- ajouter le numéro de la ligne à la dernière ligne, première colonne.
- fermer fichier1
- 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
Code :
- for i in $(seq 10)
- do
- nom = (cat fichier1 | awk 'NR==$i {print $1}')
- #affecte la ième ligne à nom
- valeur = (cat fichier1 | awk 'NR==($i+1) {print $1}')
- #affecte la (i+1)ème ligne à valeur
-
- colonne = -1
- for j in $(seq (cat fichier2 | awk 'NR==1 {print NF }'))
- #de la 1ère à la dernière colonne
- do
- colonne = (cat fichier2 | awk '$j==$nom {print j }'))
- #colonne = numéro de la colonne ou le nom est égal
- done
-
- # A COMPLETER
- # PAS ENCORE FINI
- # DO NOT USE CA MARCHE PAS
- 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