Recherche dans liste fichier

Fermé
fabien.joubert Messages postés 35 Date d'inscription vendredi 15 juin 2007 Statut Membre Dernière intervention 31 juillet 2008 - 3 juil. 2007 à 12:38
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 - 4 juil. 2007 à 13:36
Attention le problème que je vous expose est assez long, merci à tous ceux qui qui prendrons patience
:)
********************************************************************

1)voila mon problème j'ai une liste complète (et longue) comme celle ci dans le fichier list_rules.tmp

4S+06NN 1er samedi sur 4 semaines
4S+07NN 1er dimanche sur 4 semaines
4S+13NN 2eme samedi sur 4 semaines
4S+14NN 2eme dimanche sur 4 semaines
4S+20NN 3eme samedi sur 4 semaines
4S+21NN 3eme dimanche sur 4 semaines
4S-01NN 4eme dimanche sur 4 semaines
4S-02NN 4eme samedi sur 4 semaines
A+01AA Le premier jour de l'annee
A+01O+ le premier jour ouvre de l'annee
A+5NN le 5 janvier
A-01O- le dernier jour ouvre de l'annee
A-05_V le 2ieme vendredi ouvre de l'annee
A-08_V le 8ieme jour ouvre de l'annee
A-27N le 5 decembre
CAT le dernier jour ouvre sem entiere mois
CP vendredi ouvre derniere sem entiere mois
CPON
H+01_N tous les lundis
H+01_S tous les 15 jours le lundi
H+02O+ tous les mardis si chome report+
H+02_N tous les mardis
H+03_N tous les mercredis
H+04_N tous les jeudis
H+05_N tous les vendredis
H+06_N tous les samedis
H+07_N tous les dimanches
J+01LJ Du Lundi au Jeudi
J+01LS Du lundi au samedi
J+01LV Du Lundi au Vendredi
J+01LV_N Du Lundi au Vendredi sauf jours feries
J+01MD Du Mardi au Dimanche
J+01MS Du Mardi au Samedi
J+01NN tous les jours chomes ou feries
J+01_N TLJ sauf Dim et jours feries
J+01_N-1 sauf les lundi
J+01_N-5 tous les jours sauf le vendredi
J+01_N-7 sauf les dimanches
J+02LD tous les 2 jours
J+04LV 4 jour du moi (sauf sam, dim) + report
J+1_N-6 tous les jours sauf le samedi
J+LMV tous les Lu Me Ve
JN01ON tous les jours ouvres
JN01_N tous les jours
JOMA-VE Du Mardi au Vendredi Jours ouvres
LOL le 25 du mois
LOL1 1er semaine
LOL2 1er semaine
LOL21 le 25 du mois
LOL22 le 25 du mois
LOL23 le 25 du mois
LOL24 le 25 du mois
LOL30 tous les 2 jours
LOLM tous les jours
LOLMMD 1er jour de l annee
M+01O+ le premier jour ouvre du mois
M+05O+ le 5eme jour du mois report +
M+1DIMAN Le premier dimanche du mois
M+1LUNDI Le premier lundi du mois
M+1MARDI tous les premiers mardis ouvres du mois
M+1SAMED Le premier samedi du mois
M+1VEN premier vendredi moi
M+2DIMAN Le 2eme dimanche du mois
M+2LUNDI Le 2eme Lundi du mois
M+2MERCR tous les deuxiemes mercredis du mois
M+2SAMED Le 2eme samedi du mois
M+2VEN deuxieme vendredi moi
M+3DIMAN Le 3eme dimanche du mois
M+3LUNDI Le 3eme Lundi du mois
M+3SAMED Le 3eme samedi du mois
M+3VEN troisieme vendredi moi
M+4DIMAN Le 4eme dimanche du mois
M+4LUNDI Le 4eme Lundi du mois
M+4SAMED Le 4eme samedi du mois
M+5DIMAN Le 5eme dimanche du mois
M+5LUNDI Le 5eme Lundi du mois
M+L+1DIM Lundi apres 1er Dimanche mois impair
M-01O- le dernier jour ouvre du mois
M-01_N le dernier jour du mois
M-11VEN ven prec le ven prec dernier Lun du mois
M-1DIMAN Le dernier dimanche du mois
M-1SAM Le dernier Samedi du mois
M-1VEN Le dernier vendredi du mois
M-3JVEN Vendredi dans les 3 derniers j du mois
M-4DN- Dimanche preced dernier mercredi mois
M-4VN- Vendredi preced dernier lundi mois
M-7DIM avant dernier dimanche moi
M-7VEN avant dernier vendredi moi
MI+L+1DI lundi qui suit 1er Dimanche mois impairs
MN01_N le 1er du mois
MN02_N le 2 du mois
MN03_N le 3 du mois
MN04_N le 4 du mois
MN05_N le 5 du mois
MN06_N le 6 du mois
MN07_N le 7 du mois
MN08_N le 8 du mois
MN09_N le 9 du mois
MN10_N le 10 du mois
MN11_N le 11 du mois
MN12_N le 12 du mois
MN13_N le 13 du mois
MN14_N le 14 du mois
MN15_N le 15 du mois
MN16_N le 16 du mois
MN17_N le 17 du mois
MN18_N le 18 du mois
MN19_N le 19 du mois
MN20_N le 20 du mois
MN21_N le 21 du mois
MN22_N le 22 du mois
MN23_N le 23 du mois
MN24_N le 24 du mois
MN25_N le 25 du mois
MN26_N le 26 du mois
MN27_N le 27 du mois
MN28_N le 28 du mois
MN29_N le 29 du mois
MN30_N le 30 du mois
MN31_N le 31 du mois
MN_5_N Dernier jour du mois -5
MP+25_N Le 25 des Mois pairs
PJOPJO essai p jourdan
T+1LUN Premier lundi du Trimestre
T-56S Du lundi au samedi
T256S Du lundi au samedi
TEST1 TEST
TESTSBO test sylvain
TESTSER test ER
TOTO le dernier jour ouvre sem entiere mois
TOTO2 le dernier jour ouvre sem entiere mois
TV4_J Jours Calendaires
TV4_JO Jours ouvres
W+01O+ le premier jour ouvre de la semaine
W-01O- le dernier jour ouvre de la semaine


**********************************************************

2) J'ai aussi un fichier list_rules3.tmp qui ne contient que les éléments suivants

H+01_N
H+02_N
J+01LS
J+01LV
M+1DIMAN


***************************************************

3) je voudrais créer un fichier rules.txt qui contient ceci

H+01_N tous les lundis
H+02_N tous les mardis
J+01LS Du lundi au samedi
J+01LV Du Lundi au Vendredi
M+1DIMAN Le premier dimanche du mois


***************************************************

4) Alors j'ai tapé le code source suivant dans un fichier extract.ksh

for regle in $(cat list_rules3.tmp)
do
ligne=$(grep $regle list_rules.tmp)
echo $ligne >>rules.txt
done


***************************************************

5) Mais en fait j'obtiens dans rules.txt le résultat suivant

H+01_N tous les lundis
H+02_N tous les mardis
J+01LS Du lundi au samedi
J+01LV Du Lundi au Vendredi J+01LV_N Du Lundi au Vendredi sauf jours feries
M+1DIMAN Le premier dimanche du mois


*****************************************************************************

6) Bilan

En fait ce qui se passe, c'est que lorsqu'il fait le grep dans la boucle, il va sélectionner pour $regle=J+01LV, 2 occurences J+01LV et J+01LV_N parce qu'ils contiennent tous les 2 les caractères J+01LV.

Je ne veux pas sélectionner J+01LV_N parce qu'il n'est pas dans mon fichier list_rules3.tmp

Comment dois je faire pour résoudre ce problème. Puis je utiliser avec grep une option supplémentaire qui prends compte la taille de $regle?

Bien entendu je ne veux pas supprimer manuellement J+01LV_N... il faut que ce soit dynamique : quelquesoit le contenu du fichier list_rules3.tmp

*******************************************************************************

En espérant que j'ai été suffisament claire.
Merci d'avance à tous ceux qui oseront s'aventurer.
A voir également:

12 réponses

dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
3 juil. 2007 à 12:47
Par exemple en précisant que la règle est en début de ligne et fini par un blanc

grep "^$regle "
0
fabien.joubert Messages postés 35 Date d'inscription vendredi 15 juin 2007 Statut Membre Dernière intervention 31 juillet 2008 14
3 juil. 2007 à 13:30
Avec "^$regle "

quand j'exécute cette commande, mon fichier rules.txt est vide!
As tu une explication devant ça?

for regle in $(cat list_rules3.tmp)
do
ligne=$(grep "^$regle " list_rules.tmp)
echo $ligne >>rules.txt
done
0
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
3 juil. 2007 à 13:37
Est-ce que dans list_rules.tmp les élémets sont séparés par un blanc ou un tab ?
et manuellement : grep "^J+01LV[ <tab>]" list_rules.tmp
[ <tab>] contient [blanc tab]
0
fabien.joubert Messages postés 35 Date d'inscription vendredi 15 juin 2007 Statut Membre Dernière intervention 31 juillet 2008 14
3 juil. 2007 à 13:43
je ne sais pas parce que je n'ai pas accès au code source de "fabrication" du fichier list_rules.tmp

mais en regardant sa structure j'aurais en vie de dire que c'est un tab

mais pourquoi qu'est ce que ca change de savoir ca?
0

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

Posez votre question
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
3 juil. 2007 à 13:51
Pour voir si c'est un blanc ou un tab:
head -3 list_rules.tmp | od -c
si il y a \t c'est tab
rechercher un blanc ou un tab, ce n'est pas le même caractère.
0
fabien.joubert Messages postés 35 Date d'inscription vendredi 15 juin 2007 Statut Membre Dernière intervention 31 juillet 2008 14
3 juil. 2007 à 14:03
voila ce que j'obtiens

je suppose alors que ce sont des espaces puisque je vois \n

0000000 4 S + 0 6 N N 1 e r s a
0000020 m e d i s u r 4 s e m a i
0000040 n e s
0000060 \n 4 S + 0 7 N N 1 e r
0000100 d i m a n c h e s u r 4
0000120 s e m a i n e s
0000140 \n 4 S + 1 3 N N
0000160 2 e m e s a m e d i s u r
0000200 4 s e m a i n e s
0000220 \n
0000231
0
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
3 juil. 2007 à 14:14
bizare, il devrait y avoir un blanc ou \t entre N et 1
0000000 4 S + 0 6 N N 1 e r s a
ca veut dire qu'il n'y a pas de séparateur. \n c'est la fin de ligne.
et en faisant head -4 list_rules.tmp ?
0
fabien.joubert Messages postés 35 Date d'inscription vendredi 15 juin 2007 Statut Membre Dernière intervention 31 juillet 2008 14
3 juil. 2007 à 14:16
voici ce que j'obtiens... tu en conclu quoi?


4S+06NN 1er samedi sur 4 semaines
4S+07NN 1er dimanche sur 4 semaines
4S+13NN 2eme samedi sur 4 semaines
4S+14NN 2eme dimanche sur 4 semaines
0
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
3 juil. 2007 à 14:19
Le résultat du od -c est étrange.bon que répond
grep "^J+01LV[ <tab>]" list_rules.tmp
[ <tab>] contient [blanc tab] tab == touche tab
et sans "
grep ^J+01LV[ <tab>] list_rules.tmp
0
fabien.joubert Messages postés 35 Date d'inscription vendredi 15 juin 2007 Statut Membre Dernière intervention 31 juillet 2008 14
3 juil. 2007 à 14:38
Non mon fichier est toujours vide...
0
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
3 juil. 2007 à 14:46
en exécutant cette ligne dans la fenêtre
grep ^J+01LV[ <tab>] list_rules.tmp
0
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
4 juil. 2007 à 13:36
Remplacer le grep par awk:
ligne=$(awk '$1 ~ /'"$regle"'/ {print $0}' list_rules.tmp)
0