Forum Programmation.perl récupération lignes ayant des mots identiques.

Posté par  .
Étiquettes : aucune
0
2
nov.
2007
Bonjour,

comment récupérer dans un fichier les lignes d'un autre fichier
qui contiennent une partie identique?

Fichier1:
tyty aaaaa bien
gig aaaaa mal
1112vf2s2v3
sqdfqs
df

Je voudrais avoir le Fichier2 comme cela:

tyty aaaaa bien
gig aaaaa mal

Merci pour vos réponses.
  • # Hmm, en shell, à l'arache ...

    Posté par  . Évalué à 2.

    $ tr ' \t' '\n\n' < fichier1 | sort | uniq -d | grep . | while read i ; do grep -n --color $i dms ; done > fichier2
    • [^] # Re: Hmm, en shell, à l'arache ...

      Posté par  . Évalué à 2.

      Erratum : remplacer dms par fichier1, également.
      • [^] # Re: Hmm, en shell, à l'arache ...

        Posté par  . Évalué à 3.

        Puis il manque l'option word, aussi. Décidément ...
        Du coup, je la reposte au propre :

        $ tr ' \t' '\n\n' < fichier1 | sort | uniq -d | grep . | while read i ; do grep -w -n --color $i fichier1 ; done > fichier2
  • # join

    Posté par  . Évalué à 1.

    Hello !
    Réfères-toi au titre de mon commentaire, et non, je n'ai pas fumé, et non, je ne te propose pas un join ;-) !
    En fait, cette commande s'utilise simplement ainsi :
    $ join fichier1 fichier2
    Et te sort exactement ce que tu souhaites. La seule contrainte, c'est que les deux fichiers soient triés au moment de l'appel.
    Tu peux pour ce faire utiliser la commande sort.
    Et si tu ne veux pas casser des fichiers d'origine, passe par des fichiers temporaires.
    Voilà, en espérant que ça t'aidera, comme on dit.
    • [^] # Re: join

      Posté par  . Évalué à 2.

      La contrainte également, c'est que tous ces mots soient dans la même colonne. De toutes façons, il ne veut pas faire une jointure entre deux fichiers, mais créer un nouveau fichier en ne conservant du premier que les lignes qui contiennent des mots répétés sur différentes lignes.
      • [^] # Re: join

        Posté par  . Évalué à 1.

        Je ne dispose que du fichier fichier1 et je veux créer un fichier fichier2 qui ne contient que les lignes identiques au fichier1 et le tout en Perl.
        • [^] # Re: join

          Posté par  . Évalué à 1.

          Arf, hé ben, j'ai tout faux. En fait, non seulement, je n'ai pas regardé le forum dans lequel tu as posté, mais en plus, j'ai lu ta question trop vite... Et je ne suis pas le seul apparemment ;-) !
          Du coup, n'y connaissant rien du tout à la programmation en perl, je laisse la parole aux mongeurs qui s'y connaissent.
        • [^] # Re: join

          Posté par  . Évalué à 2.

          lignes identiques au fichier1


          - Ca ne veut rien dire (dans ce sens-là).
          - Pourquoi spécialement en Perl ?
  • # au fait : grep

    Posté par  . Évalué à 3.

    J'ajouterai enfin que si tu connais le motif à récupérer; c'est-à-dire qu'en l'occurence, tu souhaites récupérer les lignes contenant "aaaaa", c'est la commande grep qui sert à cela.

    $ grep aaaaa fichier1 > fichier2

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.