IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

rechercher et remplacer des mots par leurs identifcateurs. (sed / awk/ grep/ tr)


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 63
    Points : 86
    Points
    86
    Par défaut rechercher 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.

  2. #2
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ cat fich1
    1 Eicosatrienoic Acid
    2 Abdomen
    3 Absorption
    4 Academies and Institutes
    5 Acceleration
    6 Accidents
    7 Acetates
    8 Acids
    9 Acylation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ cat fich2
    Acceleration
    Accidents
    Acetates
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ grep -f fich2 fich1 | grep -o '[[:digit:]]*'
    5
    6
    7

  3. #3
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 595
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 595
    Points : 19 477
    Points
    19 477
    Par défaut
    plus rapide, puisqu'il n'y a qu'une commande impliquée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk 'FNR==NR{k=$1; sub($1 FS,""); a[$0]=k; next}{print a[$0]}' fich1 fich2

  4. #4
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Citation Envoyé par N_BaH Voir le message
    plus rapide, puisqu'il n'y a qu'une commande impliquée :awk 'FNR==NR{k=$1; sub($1 FS,""); a[$0]=k; next}{print a[$0]}' fich1 fich2
    C'est clair, mais à choisir, je préfère celle-ci : join -o 1.1 -1 2 -2 1 <(sort -k2 fich1) fich2

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 595
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 595
    Points : 19 477
    Points
    19 477
    Par défaut
    je n'ai pas creusé la piste du join, parce que ce sur quoi il aurait dû faire un regroupement est constitué de plusieurs mots; je me suis dit qu'il pouvait y avoir plusieurs "rubriques" «Academies», par exemple.

  6. #6
    Membre régulier
    Inscrit en
    Septembre 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 63
    Points : 86
    Points
    86
    Par défaut
    merci pour toutes vos réponses zipe31 et N_BaH. Je vais aussi tôt les essayées.

    J'avais utilisé cette commande suggérée également :

    while read line; do motif=($(echo $line)); motif[1]=$(echo ${motif[@]:1}); sed -i '/'"${motif[1]}"'/ s/'"${motif[1]}"'/'"${motif[0]}"'/' fich2; done < fich1
    Très bonne après midi à tous.

  7. #7
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 595
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 595
    Points : 19 477
    Points
    19 477
    Par défaut
    while read line; do motif=($(echo $line)); motif[1]=$(echo ${motif[@]:1}); sed -i '/'"${motif[1]}"'/ s/'"${motif[1]}"'/'"${motif[0]}"'/' fich2; done < fich1


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recherche & Sauvegarde des fichiers par leurs Extensions
    Par hackoofr dans le forum Vos Contributions VBScript
    Réponses: 1
    Dernier message: 16/02/2013, 08h22
  2. Recherche des fichiers par leurs noms
    Par hackoofr dans le forum Vos Contributions VBScript
    Réponses: 0
    Dernier message: 26/05/2011, 13h08
  3. remplacer les symbole dans des urls par leur code
    Par GoldenEyes dans le forum Réseau/Web
    Réponses: 3
    Dernier message: 15/06/2009, 18h16
  4. Remplacer des cellules par leurs valeurs
    Par benoitbs dans le forum Excel
    Réponses: 1
    Dernier message: 28/01/2008, 12h21
  5. Parser une page pour remplaçer des mots par d'autres
    Par HALOMOTO dans le forum Langage
    Réponses: 13
    Dernier message: 13/07/2006, 23h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo