Recherche avec AWK + formatage
Résolu
GHISLINO
Messages postés
214
Date d'inscription
Statut
Membre
Dernière intervention
-
GHISLINO Messages postés 214 Date d'inscription Statut Membre Dernière intervention -
GHISLINO Messages postés 214 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai un fichier FILE1 ci-dessous
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
Merci d'avance
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:
- Recherche avec AWK + formatage
- Formatage clé usb - Guide
- Formatage pc - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Rechercher ou entrer l'adresse mm - recherche google - Guide
- Recherche photo - Guide
7 réponses
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 :
... 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
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
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
Merci
Cdlt.
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.
hello
bonne année
quel est le critère pour le champ 6 ?
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour Dubcek
Meilleur voeux ,
desole ,Normalement le champ 5 et 6 j en aurais plus besoin.
donc je devrais avoir ceci
juste que pour cette ligne (Maroua-Marche-Abattoir_EXN_085;16;16511;6-3) je voudrais avoir
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
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