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 ; ):
avec un fichier interdit (le code du client avec un ; ):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Je veux avoir comme résultat:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 CLIENT2; CLIENT3; CLIENT6;
et donc supprimer les occurences correspondantes trouver dans le fichier intedit.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Sous bash j'essaye de faire ceci:
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...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 for i in `cat interdit.txt`; do sed -i "/^$i/d" Clients.txt; done;
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.
Partager