Linux bash liste lignes non présentes fichie2
sbouli
Messages postés
208
Statut
Membre
-
jipicy Messages postés 40842 Date d'inscription Statut Modérateur Dernière intervention -
jipicy Messages postés 40842 Date d'inscription Statut Modérateur Dernière intervention -
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
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
-
-
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)"
-
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
-
-
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 -
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$
;-))
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
hahahaha énorme ....
donc systeme ubuntu hardy heron
shell ... sh ...??
grep --version GNU grep 2.5.3
ça répond a la demande ?
Stéphane -
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.
-
Si tu tapes :
grep -v 'email2@ledomaine.com' test1
Ca donne quoi ?
-
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
- et 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
-
-
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
-
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 -
Voir dans la FAQ : Suppression impossible : liste d'arguments trop longue