Linux bash liste lignes non présentes fichie2

Bonjour,

Je cherche une commande me permettant d'obtenir la liste des lignes présentes dans le fichier 1 mais non présentes dans le fichier 2. Chaque ligne contient uniquement une adresse email.

j'ai essayé via la commande comm mais elle ne permet pas exactement ça.

Exemple :

fichier 1 (chaque fichier est passé par uniq et sort donc pas de doublon) :

email1@ledomaine.com
email2@ledomaine.com
email3@ledomaine.com

fichier 2 :
email2@ledomaine.com

résultat espéré ... :

email1@ledomaine.com
email3@ledomaine.com

En vous remerciant !

Stéphane

10 réponses

  1. Modérateur
    Voir dans la FAQ : Suppression impossible : liste d'arguments trop longue
    1. UP

      Cependant, c'est le serpent qui se mort la queue ... si je lance la commande sur 2 fichiers avec quelques milliers de lignes, j'ai :

      # grep -v "$(sort fichier?.log | uniq -d)" fichier1.log
      -bash: /bin/grep: Liste d'arguments trop longue

      il doit pas aimer avec beaucoup de ligne dans fichier1.log et fichier2.log ....

      Stéphane
      1. Cependant, c'est le serpent qui se mort la queue ... si je lance la commande sur 2 fichiers avec quelques milliers de lignes, j'ai :

        # grep -v "$(sort fichier?.log | uniq -d)" fichier1.log
        -bash: /bin/grep: Liste d'arguments trop longue

        il doit pas aimer avec beaucoup de ligne dans fichier1.log et fichier2.log ....

        Stéphane

        1. Modérateur
          Si tu tapes :
          grep -v 'email2@ledomaine.com' test1
          Ca donne quoi ?
          1. et voila :
            # grep -v 'email2@ledomaine.com' test1
            email1@ledomaine.com
            email3@ledomaine.com
            
            #
            


            c'est bien le retour à la ligne qui pioche ...

            grep -v '
            email2@ledomaine.com' test1

            stéphane
          2. Modérateur
            @sbouliEffectivement, mais il sort d'où ce retour à la ligne ???
            Décompose l'expression :
            sort test* | uniq -d
            Renvoie quoi ?
          3. @jipicyet voila :

            # sort test* | uniq -d
            
            email2@ledomaine.com
            #
            


            EDIT : si je sors les 2 lignes vierge en bas des fichiers j'ai bien :

            # cat test1
            email1@ledomaine.com
            email2@ledomaine.com
            email3@ledomaine.com
            # cat test2
            email2@ledomaine.com
            # grep -v "$(sort test* | uniq -d)" test1
            email1@ledomaine.com
            email3@ledomaine.com
            #
            


            stéphane
          4. Modérateur
            @sbouliC'est bon j'ai compris ;-\

            Vires les lignes vides à la fin de tes 2 fichiers test1 et test2 ;-(

            Dans mon exemple les lignes vides n'existent pas, c'est juste pour aérer la lecture que je les ai mises...
        2. Modérateur
          Tu peux exécuter la commande suivante et nous coller le résultat, s'il te plaît :
           set -xv; grep -v "$(sort test* | uniq -d)" test1; set -
          Merci.
          1. Désolé pour le delais j'étais parti manger :)

            # set -xv; grep -v "$(sort test* | uniq -d)" test1; set -
            sort test* | uniq -d
            ++ sort test1 test2
            ++ uniq -d
            + grep -v '
            email2@ledomaine.com' test1
            + set -
            #
            


            stéphane
        3. hahahaha énorme ....

          donc systeme ubuntu hardy heron
          shell ... sh ...??
          grep --version GNU grep 2.5.3

          ça répond a la demande ?

          Stéphane
          1. Modérateur
            Et ça marche toujours pas ?
          2. @jipicyben non aucun changements ... :
            # cat test1
            email1@ledomaine.com
            email2@ledomaine.com
            email3@ledomaine.com
            
            # cat test2
            email2@ledomaine.com
            
            # grep -v "$(sort test* | uniq -d)" test1
            #
            
        4. Modérateur
          jp@MDK:~/tmpfs ssh$ cat test1
          email1@ledomaine.com
          email2@ledomaine.com
          email3@ledomaine.com
          
          jp@MDK:~/tmpfs ssh$ cat test2
          email2@ledomaine.com
          
          jp@MDK:~/tmpfs ssh$ grep -v "$(sort test* | uniq -d)" test1
          email1@ledomaine.com
          email3@ledomaine.com
          
          jp@MDK:~/tmpfs ssh$
          ;-))
          1. Ya comme un soucis ... :

            root@toto:# cat test1
            email1@ledomaine.com
            email2@ledomaine.com
            email3@ledomaine.com

            root@toto:# cat test2
            email2@ledomaine.com

            root@toto:# grep -v "$(sort test* | uniq -d)" test1
            root@toto:# $(cat test* | sort | uniq -d) => "$(sort test* | uniq -d)"
            -bash: email2@ledomaine.com : commande introuvable
            root@toto:#

            au secours ....

            Stéphane
            1. Modérateur
              Salut,
              [tmpfs]$ cat fich1
              email1@ledomaine.com
              email2@ledomaine.com
              email3@ledomaine.com
              
              [tmpfs]$ cat fich2
              email2@ledomaine.com
              
              [tmpfs]$ grep -v "$(sort fich* | uniq -d)" fich1
              email1@ledomaine.com
              email3@ledomaine.com
              
              [tmpfs]$ 
              ;-))

              Edit : $(cat fich* | sort | uniq -d) => "$(sort fich* | uniq -d)"
              1. Bonjour,

                Je viens d'essayer la solution grep mais j'ai une erreur :

                grep: email@supermegadomaine.fr: Aucun fichier ou dossier de ce type
                ....
                répété pour pas mal d'email...

                pour être sûr qu'on s'est bien compris, mon exemple ne contient que 3 lignes dans l'un et 1 dans l'autre fichier, en réalité j'ai plusieurs dizaine de millier de lignes par fichiers.

                Stéphane
              2. Modérateur
                @sbouliOn sait bien compris oui, la preuve dans mon message précédent et les exemples marchent bien avec les 2 fichiers fournis ... ;-\

                Quelle version de grep ? quel shell ? Quel système ?
            2. Bonsoir,

              diff fichier1 fichier2
              1. diff compare les 2 fichiers ligne par ligne donc je ne pense pas que ça corresponde à ce que je recherche. (le résultat de la commande me laisse d'ailleurs dubitatif).

                Cependant, merci d'avoir pris un peu de votre temps pour moi.

                Stéphane