Recherche avec AWK + formatage

Résolu/Fermé
GHISLINO Messages postés 214 Date d'inscription lundi 25 juillet 2011 Statut Membre Dernière intervention 8 décembre 2023 - 31 déc. 2014 à 15:11
GHISLINO Messages postés 214 Date d'inscription lundi 25 juillet 2011 Statut Membre Dernière intervention 8 décembre 2023 - 8 avril 2015 à 17:22
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

A voir également:

7 réponses

mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
31 déc. 2014 à 17:15
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
0
GHISLINO Messages postés 214 Date d'inscription lundi 25 juillet 2011 Statut Membre Dernière intervention 8 décembre 2023
31 déc. 2014 à 18:42
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.
0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
1 janv. 2015 à 20:36
Et du coup avec les indications que je t'ai données, tu es débloqué ? Meilleurs voeux également :-)
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
2 janv. 2015 à 09:23
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
0

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

Posez votre question
GHISLINO Messages postés 214 Date d'inscription lundi 25 juillet 2011 Statut Membre Dernière intervention 8 décembre 2023
2 janv. 2015 à 12:30
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
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
2 janv. 2015 à 13:20
commet trouver celle qui manque
toutes les lignes sont par groupe de 3, avec 123 ou 678 dans le premier champs ?
0
GHISLINO Messages postés 214 Date d'inscription lundi 25 juillet 2011 Statut Membre Dernière intervention 8 décembre 2023
8 avril 2015 à 17:22
bonjour Dubcek


merci bcp

cdlt.
0