epo03 a écrit :
J'ai 2 fichiers fic1 et fic2 et je veux soustraire à fic2 ce que je trouve dans fic1 ; pas de problème avec des petits fichiers (j'utilise grep -v) mais fic1 fait 4000 lignes et fic2 13 millions de lignes.
J'ai tenté un sed (ci dessous) mais il va me falloir beaucoup de temps pour traiter l'ensemble de mes données.
Un awk existe t'il comme pour remplacer le grep (awk -F'.' 'NR==FNR { Num[$0] ; next } ($1 in Num)' fic1 fic2) ?
cat fic1
aaa
ddd
cat fic2
aaa.111
bbb.222
ccc.333
ddd.444
Code :
for i in `cat fic1` do sed s/$i/xxxxxxxxxxxxx/ fic2 > fic_tmp mv fic_tmp fic2 done grep -v "xxxxxxxxxxxxx" fic2 > fic3
|
cat fic3 bbb.222
ccc.333
|
Salut
Sans parler de la solution de watael, pourquoi toute cette magouille de remplacer les éléments de fic1 par xxxxxxxxx ? Que se passera-t-il si une ligne originelle de fic1 contient vraiment xxxxxxxxxx ?
Code :
cat fic2 | while read ligne do exec 3<fic1 rm -f fic1 cat 0<&3 | grep -v "$ligne" > fic1 done
|
Accessoirement on ne fait jamais de for i in `commande complexe` parce que si la commande complexe renvoie des infos avec espace, le for va partir en torche...
---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.