Menu

Extractions de données entre 2 fichiers

Coin-C44 - 15 nov. 2017 à 01:48 - Dernière réponse :  Coin-c
- 15 nov. 2017 à 09:36
Bonsoir,

- J'ai un fichier "Editions"
Editions des produits
"A";"CTF";"ALPHA";" BETA";
"CTF";"AFFECT";"12300220";"98707718"
"CTF";"AFFECT";"12302223";"98707719"
"CTF";"AFFECT";"24621010";"98707720"
"CTF";"AFFECT";"24623015";"98707721"
"CTF";"AFFECT";"25200120";"98707723"
"CTF";"AFFECT";"25201289";"98707724"


- et mon fichier "Articles"
NOM|987|7718|CLEM|JEAN-JACQUES|
99|987|7718|01022018|
NOM|987|7719|AIT BELHAND|SAMUEL|
88|987|7719|01022018|
NOM|987|7721|BUFF|MARJORIE|
88|987|7721|01022018|
99|987|7721|06|08102017
99|987|7721|06|08012018


-> qui correspondent entre eux via la 4eme colonne du premier et la troisieme du second fichier (5 derniers numeros moins le zero)

Si ce awk me ressort l' identifiant Beta de Editions (4eme colonne) qui dispose de plusieurs lignes 99:

awk -F ';|";"|[|]' '/CTF/ {t[x=substr($4, 4)+0]=1; t1[x]=$4} /^NOM[|]/ && t[$3] {t3[$3]++} END {for (n in t3)if(t3[n]>1)print t1[n]}' Editions Articles
78607721


Comment puis je ajouter dans mon log le champ nom et prenom (ligne commencant par NOM) ainsi que les lignes en questions ? (dans l'exemple : 99|987|7721|06|08102017
99|987|7721|06|08012018)

soit :

Matricule : <champ "matricule"> - Nom et Prénom : <champ "nom prénom">
copie des lignes 99


Afficher la suite 

4 réponses

Répondre au sujet
dubcek 17298 Messages postés lundi 15 janvier 2007Date d'inscriptionContributeurStatut 23 février 2018 Dernière intervention - Modifié par dubcek le 15/11/2017 à 08:28
0
Utile
hello
avec /^NOM[|]/ il va ignorer les lignes du fichier Articles qui commencent par 99
Commenter la réponse de dubcek
0
Utile
Coucou

Desolée, je voulais ecrire


awk -F ';|";"|[|]' '/CTF/ {t[x=substr($4, 4)+0]=1; t1[x]=$4} /^99[|]/ && t[$3] {t3[$3]++} END {for (n in t3)if(t3[n]>1)print t1[n]}' Editions Articles
Commenter la réponse de Coin-c
0
Utile
1
Ceci a l'air de fonctionner.
awk -F ';|";"|[|]' '
/CTF/ {matric[substr($4, 4)+0]=$4}
/^NOM[|]/ {nom[$3]=sprintf("%s %s",$4,$5)}
/^99[|]/ {nb99[$3]++; lig99[$3]=lig99[$3] $0 ORS}
END { for (n in nb99) if(nb99[n]>1 && matric[n])
printf("Matricule : %s - Nom et Prénom : %s\n%s",matric[n],nom[n],lig40[n])
}
' Editions Articles


Merci
[Resolu]
Edit : %s\n%s",matric[n],nom[n],lig99[n])
Commenter la réponse de Coin-c