Aide Débutant Unix - Supprimer une ligne..

Résolu/Fermé
Joker - 4 janv. 2010 à 14:21
 Joker - 5 janv. 2010 à 15:28
Bonjour,

Je dois faire un listing des personnes qui ont subit une modification de contrat, d'affectation ou de poste ainsi que les entrées et les départs d'agents.
Je fais tout les jour un fichiers des agents présents dans l'entreprise que je compare à un fichier référence ( celui de la veille)
Je compare de fichier avec un COMM et je demande d'afficher les lignes uniques dans le fichiers 1 et le fichiers 2 sauf que lorsque que j'ai une modification sur l'une des informations d'un agent il apparait deux fois dans mon fichier final alors que j'aimerai avoir que la ligne avec la nouvelle information ( la ligne du fichier 2 celui du jour J)

Exemple :

Matricule;Civilité;Nom ;Prénom;DateEmbauche;DateDepart;Statut;Affectation;Activite;Observation;Direction;Departement
VEDX314;Mademoiselle;KWWWWW;Anne-Christine;07/12/2009;;CDD;Siège;ASSISTANT(E) DE DIRECTION;30 BOULEVARD GALLIENI 92130 ISSY LES MOULINEAUX;17;17 =>ligne unique du fichier ref
VJYL326;Monsieur;BXXXXX;Xavier;02/02/2009;;Titulaire;Siège;CHEF DE MISSION;62 RUE CAMILLE DESMOULINS 92130 ISSY LES MOULINEAUX;4;48 =>ligne du fichier Ref
VJYL326;Monsieur;BXXXXX;Xavier;02/02/2009;;Titulaire;Siège;CHEF DE PROJET MOA;62 RUE CAMILLE DESMOULINS 92130 ISSY LES MOULINEAUX;4;48 => ligne du fichier du jour

La ligne seulement présente dans le fichier Ref : j'en ai besoin car ça veut dire que c'est un agent qui est sortie
Par contre pour les deux suivantes seuleument la deuxieme ligne m'intéresse.

Je me suis dis que je pouvais peut être faire un test sur le matricule en lui disant : "si matricule apparait sur deux ligne ne prendre que la deuxieme ligne"
maintenant comment codé ça en unix !!!

si quelqu'un peut m'aider merci d'avance.
A voir également:

8 réponses

dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
4 janv. 2010 à 15:22
hello
si le matricule ($1) du fichier jour est présent en traitant le matricule dans le fichier ref, on ne l'imprime pas
$ 
$ cat ref 
Matricule;Civilité;Nom;Prénom;DateEmbauche;DateDepart;Statut;Affectation;Activite;­Observation;Direction;Departement
VEDX314;Mademoiselle;KWWWWW;Anne-Christine;07/12/2009;;CDD;S­iège;ASSISTANT(E) DE DIRECTION;30 BOULEVARD GALLIENI 92130 ISSY LES MOULINEAUX;17;17
VJYL326;Monsieur;BXXXXX;Xavier;02/02/2009;;Titulaire;Siège;CHEF DE MISSION;62 RUE CAMILLE DESMOULINS 92130 ISSY LES MOULINEAUX;4;48
$ 
$ cat jour
VJYL326;Monsieur;BXXXXX;Xavier;02/02/2009;;Titulaire;Siège;CHEF DE PROJET MOA;62 RUE CAMILLE DESMOULINS 92130 ISSY LES MOULINEAUX;4;48
$ 
$ cat jour ref | awk -F";" '{if(x[$1]!=$1)print $0;x[$1]=$1}'|sort
Matricule;Civilité;Nom;Prénom;DateEmbauche;DateDepart;Statut;Affectation;Activite;­Observation;Direction;Departement
VEDX314;Mademoiselle;KWWWWW;Anne-Christine;07/12/2009;;CDD;S­iège;ASSISTANT(E) DE DIRECTION;30 BOULEVARD GALLIENI 92130 ISSY LES MOULINEAUX;17;17
VJYL326;Monsieur;BXXXXX;Xavier;02/02/2009;;Titulaire;Siège;CHEF DE PROJET MOA;62 RUE CAMILLE DESMOULINS 92130 ISSY LES MOULINEAUX;4;48
$ 
0
Merci pour ta rapide réponse.

donc si j'ai compris, il faudrais que je supprime les lignes dans mon fichier référence qui ont un matricule en commun dans le fcihier du jour.
comment dois-je faire pour récupere juste le matricule du fichier du jour pour faire une recherche dans le fichier référence pour supprimer la ligne correspondante ? (relier mon matricule à la variable $1)
comme ça ensuite j'applique la ligne de commande comme ci-dessus :
cat jour ref | awk -F";" '{if(x[$1]!=$1)print $0;x[$1]=$1}'|sort

Merci encore !
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
4 janv. 2010 à 16:05
c'est le awk qui fait tout cela, ce qui compte c'est l'ordre dans lequel les fichiers sont traités: cat jour ref

if(x[$1]!=$1)print $0 : si x[matricule] != matricule, on l'imprime, si on traite ref, x[matrcule] existe donc on n'imprimne pas
x[$1]=$1 : on stocke ce matricule x[matricule]=matricule
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
4 janv. 2010 à 17:03
on peut aussi faire:
on stocke chaque ligne dans x indexé avec matricule, le fichier jour venant, cette fois après ref
$ cat  ref jour | awk -F";" '{x[$1]=$0} ; END{for( n in x)print x[n]}' 
Matricule;Civilité;Nom;Prénom;DateEmbauche;DateDepart;Statut;Affectation;Activite;­Observation;Direction;Departement
VJYL326;Monsieur;BXXXXX;Xavier;02/02/2009;;Titulaire;Siège;CHEF DE PROJET MOA;62 RUE CAMILLE DESMOULINS 92130 ISSY LES MOULINEAUX;4;48
VEDX314;Mademoiselle;KWWWWW;Anne-Christine;07/12/2009;;CDD;S­iège;ASSISTANT(E) DE DIRECTION;30 BOULEVARD GALLIENI 92130 ISSY LES MOULINEAUX;17;17
$ 
0
Bon j'ai fait différent test et je n'arrive pas à avoir le résultat attendu.

En faite pour pouvoir arrivée à mon résultat il faudrai que je le tri uniquement sur mon fichier final ou j'ai :

Matricule;Civilité;Nom ;Prénom;DateEmbauche;DateDepart;Statut;Affectation;Activite;Observation;Direction;Departement
VJYD502;Mademoiselle;Nxx xxxx;Sylvie;01/10/2008;;Titulaire;Siège;CONSEILLER SUPPORT UTILISATEUR COMPTABLE;30 BOULEVARD GALLIENI 92130 ISSY LES MOULINEAUX;7;63
VJYL326;Monsieur;Byyyyy;Xavier;02/02/2009;;Titulaire;Siège;CHEF DE MISSION;62 RUE CAMILLE DESMOULINS 92130 ISSY LES MOULINEAUX;4;48VJYL326;Monsieur;Byyyyy;Xavier;02/02/2009;;Titulaire;Siège;CHEF DE PROJET MOA;62 RUE CAMILLE DESMOULINS 92130 ISSY LES MOULINEAUX;4;48
VJYP058;Monsieur;Faaaaa;Matteo;01/03/2008;;Titulaire;Siège;EXPERT ORGANISATION;17 AVENUE DE CHOISY 75643 PARIS CEDEX 13;18;128VJYP058;Monsieur;Faaaaa;Matteo;01/03/2008;;CDD;Siège;EXPERT ORGANISATION;17 AVENUE DE CHOISY 75643 PARIS CEDEX 13;18;128

ce que je souhaite c'est enlever les lignes en gras sur ce même fichier car si je fais comme expliqué plus haut
j'enlève aussi des lignes que je dois prendre.

est-ce que quelqu'un c'est comment faire ?

Merci.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
5 janv. 2010 à 11:08
ca ?
$ cat ref
Matricule;Civilité;Nom;Prénom;DateEmbauche;DateDepart;Statut;Affectation;Activite;Observation;Direction;Departement
VJYD502;Mademoiselle;Nxx xxxx;Sylvie;01/10/2008;;Titulaire;Siège;CONSEILLER SUPPORT UTILISATEUR COMPTABLE;30 BOULEVARD GALLIENI 92130 ISSY LES MOULINEAUX;7;63
VJYL326;Monsieur;Byyyyy;Xavier;02/02/2009;;Titulaire;Siège;CHEF DE PROJET MOA;62 RUE CAMILLE DESMOULINS 92130 ISSY LES MOULINEAUX;4;48
VJYP058;Monsieur;Faaaaa;Matteo;01/03/2008;;CDD;Siège;EXPERT ORGANISATION;17 AVENUE DE CHOISY 75643 PARIS CEDEX 13;18;128
$ 
$ cat jour
VJYL326;Monsieur;Byyyyy;Xavier;02/02/2009;;Titulaire;Siège;CHEF DE MISSION;62 RUE CAMILLE DESMOULINS 92130 ISSY LES MOULINEAUX;4;48
VJYP058;Monsieur;Faaaaa;Matteo;01/03/2008;;Titulaire;Siège;EXPERT ORGANISATION;17 AVENUE DE CHOISY 75643 PARIS CEDEX 13;18;128
$ 
$ cat  jour ref | awk -F";" '{x[$1]=$0} ; END{for( n in x)print x[n]}'
Matricule;Civilité;Nom;Prénom;DateEmbauche;DateDepart;Statut;Affectation;Activite;­Observation;Direction;Departement
VJYL326;Monsieur;Byyyyy;Xavier;02/02/2009;;Titulaire;Siège;CHEF DE PROJET MOA;62 RUE CAMILLE DESMOULINS 92130 ISSY LES MOULINEAUX;4;48
VJYD502;Mademoiselle;Nxx xxxx;Sylvie;01/10/2008;;Titulaire;Siège;CONSEILLER SUPPORT UTILISATEUR COMPTABLE;30 BOULEVARD GALLIENI 92130 ISSY LES MOULINEAUX;7;63
VJYP058;Monsieur;Faaaaa;Matteo;01/03/2008;;CDD;Siège;EXPERT ORGANISATION;17 AVENUE DE CHOISY 75643 PARIS CEDEX 13;18;128
$ 
0
Yes !!!

ça fonctionne presque seul soucis j'ai mon entête de fcihiers qui se retrouve au milieu du fichier et je vois pas pourquoi ??

VJYL469;Mademoiselle;Lc ccc;Gwendoline;01/09/2006;;Titulaire;Siège;CHARGEE DE COMMUNICATION;34 RUE DE LA FEDERATION 75015 PARIS;8;68
VJYL326;Monsieur;Byyyyy;Xavier;02/02/2009;;Titulaire;Siège;CHEF DE PROJET MOA;62 RUE CAMILLE DESMOULINS 92130 ISSY LES MOULINEAUX;4;48
VJYP058;Monsieur;Faaaaa;Matteo;01/03/2008;;Titulaire;Siège;EXPERT ORGANISATION;17 AVENUE DE CHOISY 75643 PARIS CEDEX 13;18;128
VOTH094;Monsieur;AHhhhh;Moëz;01/09/2009;;Titulaire;Siège;CHEF DE PROJET MOA;30 BOULEVARD GALLIENI 92130 ISSY LES MOULINEAUX;22;22
Matricule;Civilité;Nom ;Prénom;DateEmbauche;DateDepart;Statut;Affectation;Activite;Observation;Direction;Departement
VJYP148;Mademoiselle;Lxxxxx;Audrey;14/04/2009;;Titulaire;Siège;ZREPRI;30 BOULEVARD GALLIENI 92130 ISSY LES MOULINEAUX;7;67
VEDX314;Mademoiselle;Kddddd;Anne-Christine;07/12/2009;;CDD;Siège;ASSISTANT(E) DE DIRECTION;30 BOULEVARD GALLIENI 92130 ISSY LES MOULINEAUX;17;17

Merci encore pour ton aide.
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
5 janv. 2010 à 12:09
parce que en indexant sur $1 (matricule), l'ordre change, tu peux faire
cat jour ref | awk -F";" '/Matricule/ {print $0;next} ; {x[$1]=$0} ; END{for( n in x)print x[n]}'

soit, si tous les matrcules commencent par V
cat jour ref | awk -F";" '{x[$1]=$0} ; END{for( n in x)print x[n]}' ¦ sort
0
ca y est ça fonctionne !!! j'ai du régler quelques problèmes en amont mais j'ai réussis grace à ton aide.

Merci encore !!!
0