Equivalence à "grep -v" [Shell/Unix] - Shell/Batch - Programmation
Marsh Posté le 30-12-2011 à 10:47:49
Merci je ne connaissais pas cette option du grep ; c'est beaucoup plus rapide que ma boucle avec sed
Marsh Posté le 01-01-2012 à 11:23:06
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.
|
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 :
|
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...
Marsh Posté le 04-01-2012 à 09:22:19
Sve@r a écrit : |
Tu as raison mais c'est la solution qui m'est venu à l'esprit tout de suite et je maitrisais le contenu de fic1
Marsh Posté le 29-12-2011 à 17:17:58
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
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