Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 27/04/2019, à 18:34

baloovsrayman

[Résolut] AWK formatage avec printf

Bonjour ,

je sèche sur le formatage de la ligne je n'arrive pas a faire ce que je veut malgré plusieurs tentative j'ai besoin d'un éclairage

voila comment j'aimerais que ma ligne s'affiche :
texte ( 16,86 % )

et voilas ma focntion qui fait tout planter la : hmm

percent_calc(){

	
	for i in ${!result[@]}  ; do
		sum_carac=$((result[${i}] + sum_carac ))
	done
	sum_carac=$((sum_carac / 100 ))
	echo "$sum_carac"
	gawk 'BEGIN{FS=","} {printf %s %.2f %s \n, $1 "(" $2/ '$sum_carac' "% )" } fichier_temp'

}

voilas de quoi il se plaint

gawk: ligne de commande:1: BEGIN{FS=","} {printf %s %.2f %s \n, $1 "("$2/24631")" "%" } fichier_temp
gawk: ligne de commande:1:                       ^ syntax error
gawk: ligne de commande:1: BEGIN{FS=","} {printf %s %.2f %s \n, $1 "("$2/24631")" "%" } fichier_temp
gawk: ligne de commande:1:                                  ^ la barre oblique inverse n'est pas le dernier caractère de la ligne
gawk: ligne de commande:1: BEGIN{FS=","} {printf %s %.2f %s \n, $1 "("$2/24631")" "%" } fichier_temp
gawk: ligne de commande:1:                                  ^ syntax error

Merci

Dernière modification par baloovsrayman (Le 27/04/2019, à 21:13)

Hors ligne

#2 Le 27/04/2019, à 19:00

pingouinux

Re : [Résolut] AWK formatage avec printf

Bonsoir,
Dans printf, il faut mettre le format entre " ".

Hors ligne

#3 Le 27/04/2019, à 19:04

Watael

Re : [Résolut] AWK formatage avec printf

salut,

d'abord, il y a quatre éléments à afficher, alors qu'il n'y a que trois emplacements prévus
et, il faut séparer les éléments à afficher par des virgules.

enfin, quand j'ai dit utiliser awk, je voulais dire n'utiliser QUE awk.
d'ailleurs, à quoi sert ce qui précède awk s'il doit finalement traiter un fichier, qui s'il est temporaire est sûrement inutile.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#4 Le 27/04/2019, à 19:16

baloovsrayman

Re : [Résolut] AWK formatage avec printf

Watael a écrit :

salut,

d'abord, il y a quatre éléments à afficher, alors qu'il n'y a que trois emplacements prévus
et, il faut séparer les éléments à afficher par des virgules.

enfin, quand j'ai dit utiliser awk, je voulais dire n'utiliser QUE awk.
d'ailleurs, à quoi sert ce qui précède awk s'il doit finalement traiter un fichier, qui s'il est temporaire est sûrement inutile.

le fichier_temp contient les résultats qui peuvent être afficher de manière différente cette fonction permet de afficher les résultats sous forme de % de la valeur contenue dans le fichier .
Du coup la boucle plus haut permet de totaliser tout les champs présent
Je suis sur que j'aurais pu le faire awk je suis sur mais je suis pas a l'aise avec cette fonction.   

La c'est juste pour formater mon affichage
et je n'est toujours pas compris hmm

	gawk 'BEGIN{FS=","} {printf "%s,%s,%.2f,%s\n", $1 "(" $2/'$sum_carac' "% )" } fichier_temp'

ça plante

Hors ligne

#5 Le 27/04/2019, à 19:24

pingouinux

Re : [Résolut] AWK formatage avec printf

La fin de la commande doit être

... }' fichier_temp

et non

... } fichier_temp'

Hors ligne

#6 Le 27/04/2019, à 19:34

Watael

Re : [Résolut] AWK formatage avec printf

et puis utiliser des variables du shell dans un programme externe tel que awk hmm

bref, là, c'est dégueu, et probablement "contre optimisal".

tu veux bien nous donner un exemple représentatif du fichier à traiter plus important que celui donné dans ton précédent message
et la sortie correspondante attendue, avec l'explication de la transformation.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#7 Le 27/04/2019, à 20:32

baloovsrayman

Re : [Résolut] AWK formatage avec printf

Watael a écrit :

et puis utiliser des variables du shell dans un programme externe tel que awk hmm

bref, là, c'est dégueu, et probablement "contre optimisal".

tu veux bien nous donner un exemple représentatif du fichier à traiter plus important que celui donné dans ton précédent message
et la sortie correspondante attendue, avec l'explication de la transformation.

le type de fichier a traiter est formater de cette façon =  caractère , nombre occurrence soit :
A , 135245
B , 6563
C , 765276
ect...

au final ma fonction dois simplement m'afficher :
A ( 25% )
B ( 10% )
C ( 40% )
ect...

Hors ligne

#8 Le 27/04/2019, à 20:46

pingouinux

Re : [Résolut] AWK formatage avec printf

Comment calcules-tu les pourcentages par rapport aux valeurs que tu donnes ?

Hors ligne

#9 Le 27/04/2019, à 21:03

baloovsrayman

Re : [Résolut] AWK formatage avec printf

pingouinux a écrit :

Comment calcules-tu les pourcentages par rapport aux valeurs que tu donnes ?

Je fait un total de tout les champs ici

for i in ${!result[@]}  ; do
		sum_carac=$((result[${i}] + sum_carac ))
	done

après je calcule le coef pour simplifier dans la commande awk

[code]
sum_carac=$(( sum_carac / 100 ))
[/code]

apres j'utilise awk pour afficher les resultats pour tout les champs

gawk 'BEGIN{FS=","} {printf "%1s %1s %.2f %3s \n" , $1, "(", ($2/'$sum_carac'), "% )"}' fichier_temp

Tu avais raison pingouinux en plus des nombreux problème de syntaxe et des des virgules non mise sa fonctionne enfin smile
W  ( 0.02 % )
K  ( 0.06 % )
J  ( 0.23 % )
X  ( 0.34 % )
ect ...
J'ai trouve le complément d'information  sur le formatage ici :
https://www.quennec.fr/trucs-astuces/sy … ion-printf

Hors ligne

#10 Le 27/04/2019, à 21:13

pingouinux

Re : [Résolut] AWK formatage avec printf

Alors tu dois pouvoir faire ceci :

awk '{t[NR]=$1;v[NR]=$3;s+=$3}END{for(i=1;i<=NR;i++)printf("%s ( %5.2f%% )\n",t[i],v[i]*100/s)}' fichier

Édité Correction du format

Dernière modification par pingouinux (Le 27/04/2019, à 21:15)

Hors ligne

#11 Le 27/04/2019, à 21:53

baloovsrayman

Re : [Résolut] AWK formatage avec printf

pingouinux a écrit :

Alors tu dois pouvoir faire ceci :

awk '{t[NR]=$1;v[NR]=$3;s+=$3}END{for(i=1;i<=NR;i++)printf("%s ( %5.2f%% )\n",t[i],v[i]*100/s)}' fichier

Édité Correction du format

Je te remercie , mais je veux bien une explication détailler de ta commande , ( je fait tous ça surtout pour apprendre )
et la même si j'ai une notion de ce que tu as fait je voudrais pouvoir la comprendre.

Hors ligne

#12 Le 27/04/2019, à 22:41

Watael

Re : [Résolut] AWK formatage avec printf

ah, c'est quand même beaucoup plus propre comme ça, non ?


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#13 Le 28/04/2019, à 05:53

pingouinux

Re : [Résolut] AWK formatage avec printf

baloovsrayman a écrit :

je veux bien une explication détailler de ta commande

t, v : tableaux, indexés par le numéro de ligne du fichier (NR), contenant respectivement le titre de la ligne et la valeur
s : somme des valeurs
Après avoir lu tout le fichier, la partie END est exécutée. On y fait une boucle indexée par le numéro des lignes.

Hors ligne