sed et boucle pour pour supprimer des lignes
Bonjour,
J'ai un problème que je n'arrive pas à trouver sous la ligne de commande.
Alors voilà je dois supprimer des lignes dans un fichier clients en me référant à une base interdite. Je pensais tenir le bon bout mais je suis en traine de me noyer.
Admettons que j'ai un fichier client comme ceci (séparation par des ; ):
Code:
1 2 3 4 5 6 7 8
|
CLIENT1;NOM PRENOM;ADRESSE;CODE;VILLE
CLIENT2;NOM PRENOM;ADRESSE;CODE;VILLE
CLIENT3;NOM PRENOM;ADRESSE;CODE;VILLE
CLIENT4;NOM PRENOM;ADRESSE;CODE;VILLE
CLIENT5;NOM PRENOM;ADRESSE;CODE;VILLE
CLIENT6;NOM PRENOM;ADRESSE;CODE;VILLE
CLIENT7;NOM PRENOM;ADRESSE;CODE;VILLE |
avec un fichier interdit (le code du client avec un ; ):
Code:
1 2 3 4
|
CLIENT2;
CLIENT3;
CLIENT6; |
Je veux avoir comme résultat:
Code:
1 2 3 4 5
|
CLIENT1;NOM PRENOM;ADRESSE;CODE;VILLE
CLIENT4;NOM PRENOM;ADRESSE;CODE;VILLE
CLIENT5;NOM PRENOM;ADRESSE;CODE;VILLE
CLIENT7;NOM PRENOM;ADRESSE;CODE;VILLE |
et donc supprimer les occurences correspondantes trouver dans le fichier intedit.
Sous bash j'essaye de faire ceci:
Code:
1 2
|
for i in `cat interdit.txt`; do sed -i "/^$i/d" Clients.txt; done; |
Bon ça ne marche pas vraiment. Je ne sais pas pourquoi pas tous les codes clients commençant par A sont supprimés alors qu'il devrait en rester. En plus c'est très long (bon ok il y a 200 000 clients...)
Rem1: Je n'arrive pas à faire la négation dans les options de sed ce qui me permettrai de me baser en fait que sur les bons codes et éviter de sortir une base interdite.
Rem2: Je me demande s'il n'y a pas de prob avec le $ qui est un opérande particulier sous sed... C'est pour ça que j'ai mis entre " "
Rem3: Je ne sais si c'est aussi possible de dire à sed de s'arrêter une fois la ligne supprimée car comme c'est une base client ben tous les codes sont différents... et çe me ferais gagner du temps.
Rem4: Le code client est sur 6 caractères alpha mais ne prend pas forcément tous les caractères (par AA1 , CCC88 , AB , AZREKK).
Rem5: Dans ma base interdite j'ai rajouté en fin de ligne pour chaque code un point virgule pour me faciliter la vie dans les comparaisons sinon j'avais encore plus de bordel. Donc il cherche le code client plus ;
Rem6: ça commence toujours par le code direct d'où le ^
Vous pouvez m'aider? Je me demande s'il ne faut pas que le fasse avec perl dans un plus gros prog.