[Scripting bash] Comparaison de fichiers/Recherche de matricule
Coralie98
-
Laura_F- -
Laura_F- -
Bonjour,
J'ai effectué un certain nombre de contrôles de fichiers via des scripts batchs.
Il y a un dernier contrôle sur lequel je bute.
Pour résumer, j'ai deux fichiers "base.bdd" et "exploit"
- Exemple de contenu dans le fichier "base.bdd" :
- Exemple de contenu dans le fichier "exploit" :
1) Fichier base : en colonne 4 est indiqué le matricule
=> Je dois récupérer ce matricule sur les 5 derniers chiffres en otant les zéros. Par exemple, 78600001 deviendra 1 ! 78600128 deviendra 128 etc..
2) Fichier exploit : seules les lignes qui commencent par 10 et 40 nous intéressent.
Il faut que je verifie que ces lignes 10 et 40 existent bien pour les matricules tronqués du point1.
Soit : 10|249|<matricule tronqué>
40|249|<matricule tronqué>
Cela fait plusieurs jours que je bute, les bonnes idées sont bienvenues :-/
Merci
J'ai effectué un certain nombre de contrôles de fichiers via des scripts batchs.
Il y a un dernier contrôle sur lequel je bute.
Pour résumer, j'ai deux fichiers "base.bdd" et "exploit"
- Exemple de contenu dans le fichier "base.bdd" :
"REF;"MODIF";"15000001";78600001";" ";" "
"REF";"MODIF";"1980031";78600002";" ";" "
"REF";"MODIF";"4480078";78600003";" ";" "
"REF";"MODIF";"4480078";78600128";" ";" "
- Exemple de contenu dans le fichier "exploit" :
10|249|128|DUPONT|JEAN|03101961|
20|249|128|383929829|39,01|
40|249|128|362090909|49,00|
40|249|128|362090909|49,00|
80|58|128|41|
80|58|128|41|
1) Fichier base : en colonne 4 est indiqué le matricule
=> Je dois récupérer ce matricule sur les 5 derniers chiffres en otant les zéros. Par exemple, 78600001 deviendra 1 ! 78600128 deviendra 128 etc..
2) Fichier exploit : seules les lignes qui commencent par 10 et 40 nous intéressent.
Il faut que je verifie que ces lignes 10 et 40 existent bien pour les matricules tronqués du point1.
Soit : 10|249|<matricule tronqué>
40|249|<matricule tronqué>
Cela fait plusieurs jours que je bute, les bonnes idées sont bienvenues :-/
Merci
A voir également:
- [Scripting bash] Comparaison de fichiers/Recherche de matricule
- Comparaison million milliard - Accueil - Technologies
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Explorateur de fichiers - Guide
- Logiciel de recherche de fichiers - Télécharger - Divers Utilitaires
- Impossible de supprimer un fichier - Guide
7 réponses
hello
essayer
j'ai changé la ligne 1 de base.bdd
"REF;"MODIF";"15000001";78600001";" ";" "
par
"REF";"MODIF";"15000001";78600001";" ";" "
essayer
$ awk -F ';|";|[|]' '/REF/ {t[substr($4, 4)+0]=1} /^10|^40/ && t[$3] {print $1 "|" $2 "|" $3}' base.bdd exploit
10|249|128
40|249|128
40|249|128
j'ai changé la ligne 1 de base.bdd
"REF;"MODIF";"15000001";78600001";" ";" "
par
"REF";"MODIF";"15000001";78600001";" ";" "
Merci dub pour ta réponse,
Je n'ai pas compris ton :
""REF;"MODIF";"15000001";78600001";" ";" "
par
"REF";"MODIF";"15000001";78600001";" ";" "
Ce sont les deux memes lignes non ?
Je n'ai pas compris ton :
""REF;"MODIF";"15000001";78600001";" ";" "
par
"REF";"MODIF";"15000001";78600001";" ";" "
Ce sont les deux memes lignes non ?
Dub,
Pour info, qd je lance ta commande, seule une ligne apparait :
100|50|0
Par contre, qd je teste cet autre awk
toutes les lignes 40 apparaissent + 2 lignes commencant par 100...
Pour rappel, le resultat attendu : ce sont les lignes 10 et 40
je m'y remets...!:)
Pour info, qd je lance ta commande, seule une ligne apparait :
100|50|0
Par contre, qd je teste cet autre awk
awk -F'";"' 'NR==FNR{a[substr($4,6)]}NR!=FNR&&!b{FS="|";b=1;$0=$0}NR!=FNR&&/10|40/{if($3 in a)print}' base.bdd exploit
toutes les lignes 40 apparaissent + 2 lignes commencant par 100...
Pour rappel, le resultat attendu : ce sont les lignes 10 et 40
je m'y remets...!:)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Fichier Exploit :
30|753|4194|01|13022017|PT||17240|
30|753|4199|01|04032016|DG||04000|
30|753|6001|01|04052013|EP||09090|
30|753|6002|01|01122015|IR||14230|
40|753|7000|BALASK|DOMINIQUE|22111957|L|40|04012018|31122400|
20|753|7000|04012018|39,00|
30|753|7000|03|04012018|GA|11|40|
40|753|7000|04012018|34012018|
41|753|7000|216|02012018|M|34012018|S||||P||04012018|D||
42|753|7000|216|02012018|7,48|
42|753|7000|216|03012018|7,48|
42|753|7000|216|26012018|7,48|
42|753|7000|216|29012018|7,48|
42|753|7000|216|30012018|7,48|
42|753|7000|216|34012018|7,48|
40|753|7001|LANTI|STEPHANE|29121956|R|40|04012018|31122400|
20|753|7001|04012018|0,00|
Fichier base.bdd:
TABL;LISTAB;ETAB1;ETAB2;ETAB3;LIBELLE
"*TA";"principale";"DOSS";" ";" ";"Modif mat"
"REF";"Modif";"15000001";"78600001";" ";" "
"REF";"Modif";"19800531";"78600002";" ";" "
"REF";"Modif";"44800478";"78600003";" ";" "
"REF";"Modif";"44800178";"78600128";" ";" "
Si besoin, j'ai envoyé ce dernier fichier (base.bdd) vers un autre fichier de travail au sein duquel seule ma 4ème colonne apparait de façon triée.
Merci Dub'
30|753|4194|01|13022017|PT||17240|
30|753|4199|01|04032016|DG||04000|
30|753|6001|01|04052013|EP||09090|
30|753|6002|01|01122015|IR||14230|
40|753|7000|BALASK|DOMINIQUE|22111957|L|40|04012018|31122400|
20|753|7000|04012018|39,00|
30|753|7000|03|04012018|GA|11|40|
40|753|7000|04012018|34012018|
41|753|7000|216|02012018|M|34012018|S||||P||04012018|D||
42|753|7000|216|02012018|7,48|
42|753|7000|216|03012018|7,48|
42|753|7000|216|26012018|7,48|
42|753|7000|216|29012018|7,48|
42|753|7000|216|30012018|7,48|
42|753|7000|216|34012018|7,48|
40|753|7001|LANTI|STEPHANE|29121956|R|40|04012018|31122400|
20|753|7001|04012018|0,00|
Fichier base.bdd:
TABL;LISTAB;ETAB1;ETAB2;ETAB3;LIBELLE
"*TA";"principale";"DOSS";" ";" ";"Modif mat"
"REF";"Modif";"15000001";"78600001";" ";" "
"REF";"Modif";"19800531";"78600002";" ";" "
"REF";"Modif";"44800478";"78600003";" ";" "
"REF";"Modif";"44800178";"78600128";" ";" "
Si besoin, j'ai envoyé ce dernier fichier (base.bdd) vers un autre fichier de travail au sein duquel seule ma 4ème colonne apparait de façon triée.
Merci Dub'
En fait, comme le fichier exploit depasse les 2000 lignes, j'ai copié un extrait sur lequel effectivement il n'y avait pas de correspondance.
Je remets les deux extraits de fichiers avec une correspondance (128) (cf en caractère gras)
=> Malgré la modif de ton awk, rien ne ressort Dub :-/
Exploit :
base. bdd :
Je remets les deux extraits de fichiers avec une correspondance (128) (cf en caractère gras)
=> Malgré la modif de ton awk, rien ne ressort Dub :-/
Exploit :
40|753|4194|01|14022017|PT||17240|
40|753|4199|01|04032016|DG||04000|
40|753|6001|01|04052013|EP||09090|
40|753|6002|01|01122015|IR||14240|
10|753|7000|BALASK|DOMINIQUE|22111957|L|40|04012018|31122400|
20|753|7000|04012018|39,00|
40|753|7000|03|04012018|GA|11|40|
40|753|7000|04012018|34012018|
41|753|7000|216|02012018|M|34012018|S||||P||04012018|D||
42|753|7000|216|02012018|7,48|
42|753|7000|216|04012018|7,48|
42|753|7000|216|26012018|7,48|
42|753|7000|216|29012018|7,48|
42|753|7000|216|40012018|7,48|
42|753|7000|216|34012018|7,48|
10|753|7001|LANTI|STEPHANE|29121956|R|40|04012018|31122400|
20|753|7001|04012018|0,00|
10|753|128|DURAND|ERIC|01041964|R|10|01012018|31122100|
40|753|95|01|14022017|PT||17400|
40|753|100|01|01052016|RD||07610|
40|753|120|01|01012011|CV||02000|
40|753|7136|01|01122009|RD||08240|
40|753|128|02|01122015|IR||14000|
base. bdd :
TABL;LISTAB;ETAB1;ETAB2;ETAB3;LIBELLE
"*TA";"principale";"DOSS";" ";" ";"Modif mat"
"REF";"Modif";"15000001";"78600001";" ";" "
"REF";"Modif";"19800531";"78600002";" ";" "
"REF";"Modif";"44520478";"78600003";" ";" "
"REF";"Modif";"44890198";"78600100";" ";" "
"REF";"Modif";"44940171";"78607136";" ";" "
"REF";"Modif";"47450174";"78600128";" ";" "
problème de "
base.bdd du post 1
du dernier post
$ awk -F ';|";"|[|]' '/REF/ {t[substr($4, 4)+0]=1} /^10[|]|^40[|]/ && t[$3] {print $1 "|" $2 "|" $3}' base.bdd exploit
10|753|128
40|753|100
40|753|7136
40|753|128
base.bdd du post 1
"REF";"MODIF";"4480078";78600128";" ";" "
du dernier post
"REF";"Modif";"47450174";"78600128";" ";" "
-------------------------^
Super Dubounet, ca marche! trop fort, tu m'enleves une sacrée épine du pied!
Juste une toute derniere explication, peux tu m'indiquer que signifie le ",4)+0]=1" de [substr($4, 4)+0]=1}.
Le premier 4 signifie le 4ème champ de bdd mais je ne comprend pas la suite..
Sur le net, j'ai vu que le deuxième 4 correspondait à "la taille" ???
Merci encore
Juste une toute derniere explication, peux tu m'indiquer que signifie le ",4)+0]=1" de [substr($4, 4)+0]=1}.
Le premier 4 signifie le 4ème champ de bdd mais je ne comprend pas la suite..
Sur le net, j'ai vu que le deuxième 4 correspondait à "la taille" ???
Merci encore
Très intéressant! ca me rappelle un ancien projet pour lequel j'avais du passer par des fichiers intermédiaires pour ressortir le log d'erreur.
Est ce qu'il est possible d'intégrer facilement dans votre awk, la boucle qui permettrait d'afficher les éléments en erreur (ceux qui n'ont pas d'article 10 et 40 dans votre cas) vers un fichier externe ?
Merci
Est ce qu'il est possible d'intégrer facilement dans votre awk, la boucle qui permettrait d'afficher les éléments en erreur (ceux qui n'ont pas d'article 10 et 40 dans votre cas) vers un fichier externe ?
Merci