Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

#1 Le 08/12/2012, à 23:09

sab113

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 Acylation

J'ai un autre fichier "fich2" contenant un ensemble de mots.
Exemple:

Acceleration
Accidents
Acetates

Je voudrais remplacer les mots qui apparaissent dans fich2 par leurs numéros définis dans fish1.
donc :

7
8
9

Merci à l'avance.

Dernière modification par sab113 (Le 09/12/2012, à 16:01)

Hors ligne

#2 Le 09/12/2012, à 00:15

xavier4811

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 < fich1

Dernière modification par xavier4811 (Le 09/12/2012, à 01:45)

Hors ligne

#3 Le 09/12/2012, à 11:11

credenhill

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
7

Hors ligne

#4 Le 09/12/2012, à 16:00

sab113

Re : remplacer des mots par leurs identifcateurs. [Résolu]

merci bcp xavier4811 et credenhill pour vos réponses smile

Hors ligne

#5 Le 09/12/2012, à 16:23

xavier4811

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 - fich2

au 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 ?

Hors ligne

#6 Le 09/12/2012, à 16:47

credenhill

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

Haut de page ↑