Recherche avec AWK + formatage [Résolu/Fermé]

Signaler
Messages postés
191
Date d'inscription
lundi 25 juillet 2011
Statut
Membre
Dernière intervention
12 février 2021
-
Messages postés
191
Date d'inscription
lundi 25 juillet 2011
Statut
Membre
Dernière intervention
12 février 2021
-
Bonjour,

J'ai un fichier FILE1 ci-dessous


Douggoy-HR_1;Douggoy-AG_EXN_002;8;7005;Maroua_Zokok-MX;70;1205;Douggoy-HR_1;5
Douggoy-HR_2;Douggoy-AG_EXN_002;8;7005;Maroua_Zokok-MX;70;1206;Douggoy-HR_2;4
Douggoy-HR_3;Douggoy-AG_EXN_002;8;7005;Maroua_Zokok-MX;70;1207;Douggoy-HR_3;5
Douggoy-HR_6;Douggoy-D-AG_EXN_002;16;7012;Maroua_Zokok-MX;70;21707;Douggoy-HR_6;6
Douggoy-HR_7;Douggoy-D-AG_EXN_002;16;7012;Maroua_Zokok-MX;70;21708;Douggoy-HR_7;6
Douggoy-HR_8;Douggoy-D-AG_EXN_002;16;7012;Maroua_Zokok-MX;70;21709;Douggoy-HR_8;6
Maroua-Marche-Abattoir-HR_1;Maroua-Marche-Abattoir_EXN_085;16;16511;Maroua_Zokok-MX;70;16511;Maroua-Marche-Abattoir-HR_1;3
Maroua-Marche-Abattoir-HR_3;Maroua-Marche-Abattoir_EXN_085;16;16511;Maroua_Zokok-MX;70;16513;Maroua-Marche-Abattoir-HR_3;6
Maroua-Marche-Abattoir-HR_6;Maroua-Marche-Abattoir-D_EXN_085;16;41321;Maroua_Zokok-MX;70;41321;Maroua-Marche-Abattoir-HR_6;6
Maroua-Marche-Abattoir-HR_7;Maroua-Marche-Abattoir-D_EXN_085;16;41321;Maroua_Zokok-MX;70;41322;Maroua-Marche-Abattoir-HR_7;4
Maroua-Marche-Abattoir-HR_8;Maroua-Marche-Abattoir-D_EXN_085;16;41321;Maroua_Zokok-MX;70;41323;Maroua-Marche-Abattoir-HR_8;6



je souhaiterais avoir le File2 ci-dessous en suivant la logique Douggoy-HR_1,Douggoy-HR_2,Douggoy-HR_6,Douggoy-HR_7,Douggoy-HR_8 en tenant compte du under score et du chiffre qui suit dans l'odre ci-dessus pour positioner le dernier champ de chaque ligne.

Par exemple Maroua-Marche-Abattoir_EXN_085 le _2 n'existe le dernier champ est remplacé par Zero en gras dans le File2.

File2

Douggoy-AG_EXN_002;8;7005;Maroua_Zokok-MX;70;1205;5-4-5;6-6-6
Maroua-Marche-Abattoir_EXN_085;16;16511;Maroua_Zokok-MX;70;16511;3-0-6;6-4-6



Merci d'avance

7 réponses

Messages postés
29732
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
15 avril 2021
7 072
Ce n'est pas super clair. Si j'ai bien compris tu groupes suivant la deuxième colonne (donc tu as les agrégats : Douggoy-AG_EXN_002, Douggoy-D-AG_EXN_002, Maroua-Marche-Abattoir_EXN_085, aroua-Marche-Abattoir-D_EXN_085).

1) Déjà pourquoi dans ton exemple, il n'y a pas de ligne faisant intervenir les lignes D_EXN ?

Ensuite si on regarde cette ligne :

Douggoy-AG_EXN_002;8;7005;Maroua_Zokok-MX;70;1205;5-4-5;6-6-6


... tu gardes 1205 (première ligne contenant Douggoy-AG_EXN_002, 6e colonne).

2) Donc tu ignores les valeurs colonne 6 intervenant dans les lignes suivantes ? (1206, 1207) ? Pourquoi ?

Ensuite tu as deux triplets (5-4-5) et (6-6-6). Si j'ai bien compris cela correspond aux valeurs apparaissant dans la dernière colonne pour les agrégats Douggoy-AG_EXN_002, Douggoy-D-AG_EXN_002.

3) Est-ce bien ça ?

Dans les grandes lignes :
- change ton input field separator (IFS en awk) pour utiliser ";" (option -F, ou initialise IFS dans la section BEGIN)
- Lis ton fichier ligne par ligne et vérifie qu'elle forme bien un tableau de 8 cellules.
- Tu peux extraire dans la 2e colonne la partie qui t'intéresse en splittant la chaîne sur le caractère '_' (voir fonction patsplit).
- Ensuite il faut maintenir un tableau dans lequel tu mémorises les valeurs correspondants dans File 2 aux deux dernières colonnes.
https://www.thegeekstuff.com/2010/03/awk-arrays-explained-with-5-practical-examples/

Bonne chance
Messages postés
191
Date d'inscription
lundi 25 juillet 2011
Statut
Membre
Dernière intervention
12 février 2021

Bonsoir mamiemando

Bonne et heureuse annee 2015

Merci pour ton retour .


En effet j'ai fait une erreur dans le fichier de sortie File2 , ci-dessous ce que je devrait obtenir normalement :

File2

Douggoy-AG_EXN_002;8;7005;Maroua_Zokok-MX;70;1205;5-4-5
Douggoy-D-AG_EXN_002;16;7012;Maroua_Zokok-MX;70;21707;6-6-6
Maroua-Marche-Abattoir_EXN_085;16;16511;Maroua_Zokok-MX;70;16511;3-0-6
Maroua-Marche-Abattoir-D_EXN_085;16;41321;Maroua_Zokok-MX;70;41321;6-4-6


Merci

Cdlt.
Messages postés
29732
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
15 avril 2021
7 072
Et du coup avec les indications que je t'ai données, tu es débloqué ? Meilleurs voeux également :-)
Messages postés
18240
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
30 novembre 2020
5 254
hello
bonne année
quel est le critère pour le champ 6 ?
$ awk -F ";" '{p=FS; s[$2]=$9 "-" s[$2]; t[$2]=$2 p $3 p $4 p $5 p $6 p $7} END {for (n in t){$0=t[n] p s[n]; sub("-$", ""); print}}' fichier | sort
Douggoy-AG_EXN_002;8;7005;Maroua_Zokok-MX;70;1207;5-4-5
Douggoy-D-AG_EXN_002;16;7012;Maroua_Zokok-MX;70;21709;6-6-6
Maroua-Marche-Abattoir-D_EXN_085;16;41321;Maroua_Zokok-MX;70;41323;6-4-6
Maroua-Marche-Abattoir_EXN_085;16;16511;Maroua_Zokok-MX;70;16513;6-3
Messages postés
191
Date d'inscription
lundi 25 juillet 2011
Statut
Membre
Dernière intervention
12 février 2021

Bonjour Dubcek

Meilleur voeux ,

desole ,Normalement le champ 5 et 6 j en aurais plus besoin.
donc je devrais avoir ceci


$ awk -F ";" '{p=FS; s[$2]=$9 "-" s[$2]; t[$2]=$2 p $3 p $4} END {for (n in t){$0=t[n] p s[n]; sub("-$", ""); print}}' file1.txt

Maroua-Marche-Abattoir-D_EXN_085;16;41321;6-4-6
Douggoy-AG_EXN_002;8;7005;5-4-5
Douggoy-D-AG_EXN_002;16;7012;6-6-6
Maroua-Marche-Abattoir_EXN_085;16;16511;6-3


juste que pour cette ligne (Maroua-Marche-Abattoir_EXN_085;16;16511;6-3) je voudrais avoir


Maroua-Marche-Abattoir_EXN_085;16;16511;Maroua_Zokok-MX;3-0-6


le Zero represente la ligne Maroua-Marche-Abattoir-HR_2 qui n'existe pas dans le fichier initial.

Merci Beaucoup encore pour ton coup de main

cdlt
Messages postés
18240
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
30 novembre 2020
5 254
commet trouver celle qui manque
toutes les lignes sont par groupe de 3, avec 123 ou 678 dans le premier champs ?
Messages postés
191
Date d'inscription
lundi 25 juillet 2011
Statut
Membre
Dernière intervention
12 février 2021

bonjour Dubcek


merci bcp

cdlt.