Sed trop lent

JeanBidule -  
zipe31 Messages postés 38797 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour

J'ai deux gros fichiers à comparer (environ 600000 lignes chacun)

$ cat Fichier_A
1000
1001

$ cat Fichier_B
a.b.c toto 1000
a.b.c tata 1001
a.b.c titi 1002

Le but est de trouver que le nombre 1002 (3e champs de la ligne 3 du fichier B) n'est pas présent dans le fichier A.

Alors je prends chaque ligne du Fichier_A que je supprime du Fichier_B. Ainsi à la fin il ne devrait me rester que les lignes en trop dans Fichier_B.

J'ai fais un script avec sed mais c'est trop lent (vraiment très lent) :

#!/bin/bash -x
while read ligne
do
sed -i '/$ligne/d' Fichier_B
done < Fichier_A

Comment puis-je faire pour que ça soit traité en moins de 30 jours comme ça semble être le cas avec ce script ?

Merci d'avance

2 réponses

dubcek Messages postés 19021 Statut Contributeur 5 640
 
hello
une solution avec awk
$ awk 'NF<2 {t[$1]++; next} !t[$3] {print $3}' fichierA fichierB
1002
0
JeanBidule
 
Hello

Wow super ! 20 secondes pour le traitement complet ! Merci !!
0
zipe31 Messages postés 38797 Date d'inscription   Statut Contributeur Dernière intervention   6 434
 
Salut,

Une autre méthode à tester :

$ fgrep -v -f fichierA fichierB
a.b.c titi 1002

0