Bonsoir à tous,
En désespoir de cause, je viens voir si je peux trouver de l'aide ...
Mon problème : j'ai un fichier de départ FD et n fichiers F1, F2, ..., Fn (tous a un seul champ).
Je veux filtrer dans FD toutes les lignes existantes dans F1 = > créer un fichier Res1
Prendre Res1 : filtrer tout ce qui existe dans F2 => créer Res2
Prendre Res2 : filtrer tout ce qui existe dans F3 .....pour au final avoir un fichier de départ FD filtré de tout ce qui existe dans les n fichiers F1, F2, ..., Fn
Ce qui veut dire que le fichier de sortie de ma boucle devient le .... fichier d'entrée au tour d'après !
Et ça marche pas ....
Chaque fichier fait ~500 000lignes donc je me suis dit que mes fichiers devenant de plus en plus petits, j'irais de plus en plus vite ....
Ce que j'ai fais :
Si vous avez une aide à m'apporter... merci infiniment !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 #!/bin/bash # Prend 2 arguments : le nom du fic a filtrer (pas son chemin) et un dossier qui contient les fichiers qui vont servir à filtrer. # NB : le fic a filtrer est aussi dans le dossier qui contient les fichiers filtrants FICHIERS=$(ls $2) tmp=$1 cpt=1 for fichier in $FICHIERS do if [ "$fichier" != "$1" ] then echo "Fichier trouve : $fichier" >resFiltration$cpt while read line do if ! grep -q -m 1 "$line" $2/$fichier # si la ligne n'est pas au moins une fois dans le fichier then echo $line >> resFiltration$cpt fi done < $tmp # on envoie $tmp sur l'entree standard du while ((cpt++)) tmp=$"resFiltration$cpt" echo "new tmp :$tmp" fi done
Bonne soirée
CarréNoir
Partager