Citation
lhags
Une des manières de le coder que je vois :
- on lit le fichier source ligne à ligne (cat
fichier1 | while read line)
- on récupère champ 1, on cherche la
correspondance dans le fichier3
- idem pour champ4 si existe (avec concaténation
de ce qui est après le #)
- on ecrit cette ligne dans le fichier2
- ligne suivante
Bon, ben si ton algo te semble correct, ya plus qu'à...
#!/bin/sh
# Préparation canaux input et output
exec 3<fichier1 # Le canal 3 sera associé à fichier 1 en entrée
exec 4>fichier2 # Le canal 4 sera associé à fichier 2 en sortie
# Lecture fichier 1 ligne à ligne
while read line 0<&3
do
# On récupère champ 1
c1=`echo $line |cut -f1 -c\;`
# On cherche correspondance c1 dans fichier 3 (on cherche la ligne débutant par "c1" et suivie de ";")
cor=`grep "^$c1;" fichier3`
# Petit détail => il est impératif qu'il n'y ait qu'une ligne correspondant dans fichier 3
# Si la correspondance y est (variable non vide)
if test -n "$cor"
then
# On récupère le 2° champ de cette correspondance
c2=`echo $cor |cut -f2 -c\;`
# A partir de là, j'ai un peu de mal à comprendre comment on passe au fichier 2
# J'ai l'impression que la ligne du fichier 2 est la même que celle du fichier 1
# Sauf qu'on a remplacé le champ1 par le champ pris dans le fichier 3
# Donc si c'est ça, action
# Ecriture de la ligne du fichier 1 dans fichier2 en remplaçant le champ1 par son correspondant
echo "$line" |sed -e "s/$c1/$c2/g" 1>>&4
fi
# Passage à la ligne suivante
done
Si tu veux le faire en awk, je te laisse te dém.... Moi, pour un truc pareil, je m'en sors mieux en shell (même si ce sera hyper lent). Sinon une solution Python me semble envisageable mais je viens à peine de débuter en python donc mon code risque d'être un peu malhabile
#!/bin/python
# coding: Latin-1 -*-
# Création du tableau de recherche en c1 et c2
f=open("fichier3", "r")
cherche=f.readlines()
f.close()
c1=[]
c2=[]
for line in cherche:
mots=line.split(";")
c1.append(mots[0])
c2.append(mots[1])
# Ouverture fichiers 1 et 2
fi=open("fichier1", "r")
fo=open("fichier2", "w")
# Lecture fichier1
while 1:
line=fi.readline()
# Ligne vide => fin de fichier
if line == "":
break
# Découpage de la ligne en mots
mots=line.split(";")
# Recherche du mot n° 1 dans le tableau des champs1
try:
i=c1.index(mots[0])
except:
i=-1
# Si le mot n° 1 a été trouvé en position "i" dans le tableau des champs1
if i != -1:
# Ecriture ligne en remplaçant chaque c1 par son homologue c2
fo.write(line.replace(c1, c2))
# Fermeture
fi.close()
fo.close()
L'homme qui murmurait à l'oreille des pingouins
[
fr.lang.free.fr]
Poste le Monday 30 July 2007 17:35:37