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 

Votre réponse

4 réponses

dubcek 17429 Messages postés lundi 15 janvier 2007Date d'inscriptionContributeurStatut 28 mai 2018 Dernière intervention - Modifié par dubcek le 15/11/2017 à 08:28
0
Merci
hello
avec /^NOM[|]/ il va ignorer les lignes du fichier Articles qui commencent par 99
Commenter la réponse de dubcek
0
Merci
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
Merci
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