#1 Le 08/12/2012, à 23:09
remplacer des mots par leurs identifcateurs. [Résolu]
echercher et remplacer des mots par leurs identifcateurs. (sed / awk/ grep/ tr)
Bonsoir à tous,
je voudrais solliciter votre aide si vous voulez bien. Je voudrais remplacer les mots qui apparaissent dans un fichier par leurs numéros définis dans un autre fichier. Le problème c'est que les remplacer manuellement me prends un temps considérable.
J'ai un fichier "fich1" contenant un ensemble de mots et leurs numéros chaque ligne contient un numéro et un mot.
exemple:
1 Eicosatrienoic Acid
2 Abdomen
3 Absorption
4 Academies and Institutes
5 Acceleration
6 Accidents
7 Acetates
8 Acids
9 AcylationJ'ai un autre fichier "fich2" contenant un ensemble de mots.
Exemple:
Acceleration
Accidents
AcetatesJe voudrais remplacer les mots qui apparaissent dans fich2 par leurs numéros définis dans fish1.
donc :
7
8
9Merci à l'avance.
Dernière modification par sab113 (Le 09/12/2012, à 16:01)
Hors ligne
#2 Le 09/12/2012, à 00:15
Re : remplacer des mots par leurs identifcateurs. [Résolu]
doit y avoir plus simple mais bon
while read line; do motif=($(echo $line)); motif[1]=$(echo ${motif[@]:1}); sed -i '/'"${motif[1]}"'/ s/'"${motif[1]}"'/'"${motif[0]}"'/' fich2; done < fich1Dernière modification par xavier4811 (Le 09/12/2012, à 01:45)
Asus M5A88-v EVO : AMD Phenom II X4 960T BE : 16 Go DDR3 : Precise Pangolin , LXDE
HP dv7-3145ef : i5-430M : 4 Go DDR3 : Oracle Linux 6.3 , Gnome 2
EMachine EM350 : Atom N450 : 1 Go DDR2 : Debian Wheezy , LXDE
Hors ligne
#3 Le 09/12/2012, à 11:11
Re : remplacer des mots par leurs identifcateurs. [Résolu]
hello
sed ou awk
$ sed -r 's!(^[^ ]) (.*)!s/\2/\1/!' fich1 | sed -f - fich2
5
6
7
$ awk 'FNR==NR {t[$2]=$1; next} {print t[$1]}' fich1 fich2
5
6
7Hors ligne
#4 Le 09/12/2012, à 16:00
Re : remplacer des mots par leurs identifcateurs. [Résolu]
merci bcp xavier4811 et credenhill pour vos réponses ![]()
Hors ligne
#5 Le 09/12/2012, à 16:23
Re : remplacer des mots par leurs identifcateurs. [Résolu]
Pas de quoi,
@ credenhill : vraiment plus simple c'est sur. pour la ligne sed je rajouterai peut être
sed -r 's!(^[^ ]{1,}) (.*)!s/\2/\1/!' fich1 | sed -f - fich2au cas ou fich1 contienne plus de 10 lignes, sinon ça bloque ligne 10.
Pour awk je coince si dans fich1 la ligne contient 2 mots et si une autre ligne contient 1 de ces mots
par ex
13 Machepro du Guidon
14 Machepro Duguidon
résultat :
14
14
une idée ?
Asus M5A88-v EVO : AMD Phenom II X4 960T BE : 16 Go DDR3 : Precise Pangolin , LXDE
HP dv7-3145ef : i5-430M : 4 Go DDR3 : Oracle Linux 6.3 , Gnome 2
EMachine EM350 : Atom N450 : 1 Go DDR2 : Debian Wheezy , LXDE
Hors ligne
#6 Le 09/12/2012, à 16:47
Re : remplacer des mots par leurs identifcateurs. [Résolu]
effectivement, l'exemple était trop simple :-)
$ cat fich2
Acceleration
Eicosatrienoic Acid
Academies and Institutes
Accidents
$ awk 'FNR==NR {x=$1; sub($1 OFS, ""); t[$0]=x; next} {print t[$0]}' a3 a4
5
1
4
6
$ Hors ligne
Pages : 1
- Accueil
- » Forum
- » Développement et programmation
- » remplacer des mots par leurs identifcateurs. [Résolu]