# Compter occurrence et addition de données



## symbol (5 Juillet 2018)

Re,

Maintenant que j'ai pas mal de données (dans un fichier texte), j'aimerais les exploiter.


Pour compter les occurences dans un texte, la syntaxe semble :

```
cat monFichier | grep monMot | wc -l
```

Par contre, comment compter les occurrences de mots différents qui se situent entre ":" et ":"

Par exemple :
dans le texte ci dessous, on voit qu'il a plusieurs mots différents entre ":" et ":"

JEUDI 05 JUILLET 2018 - MIDI : MAGNETICO : X1 (06,07,09,69) [4/6]▶ 2 € X1 -------- ★★ 2 € ★★
MERCREDI 04 JUILLET 2018 - SOIR : ELSIE : X1 (31,37,16) [3/4]▶ 5 € X1 -------- ★★ 5 € ★★
MERCREDI 04 JUILLET 2018 - SOIR : ELSIE : X1 (31,37,15) [3/4]▶ 5 € X1 -------- ★★ 5 € ★★
MERCREDI 04 JUILLET 2018 - SOIR : ELSIE : X1 (31,37,14) [3/4]▶ 5 € X1 -------- ★★ 5 € ★★
MERCREDI 04 JUILLET 2018 - SOIR : ELSIE : X1 (31,37,10) [3/4]▶ 5 € X1 -------- ★★ 5 € ★★

Pour le coup, la commande (cat monFichier | grep monMot | wc -l) est inefficace car elle sait compter 1 mot clairement identifié.

J'imagine qu'il faut aménager cette commande pour compter chaque occurence différente qui se situe entre ":" et ":", en sachant qu'il peut y avoir un nombre inconnu de mots différents.

Il faut vraiment maitriser parfaitement les subtilités des commandes pour arriver a un résultat.

J'aimerais savoir le faire, mais.... :-/

Si quelqu'un souhaite me guider. Merci.


----------



## macomaniac (5 Juillet 2018)

Tu peux faire :

```
cat monFichier | grep :*: | wc -l
```


l'astérisque *** > équivalant à : "toute occurrence" > inséré ici entre les *: :* pour donner *:*:* (*':*:'* si tu veux compliquer)


----------



## symbol (5 Juillet 2018)

effectivement ca fonctionne mais, ca ne donne pas le nombre d'occurence par mot différent.

Ca me donne 5, en realité ca devrait donner 1 (MAGNETICO) et 4 (ELSIE)


----------



## symbol (6 Juillet 2018)

La finalité de ce que je souhaite, c'est afficher les "pseudos" (qui se trouve entre les ":" et ":") ainsi que le total des gains (sur les 100 derniers tirages) associer a chaque pseudo, qui se trouve dans un fichier RESULTATSHISTORIQUE.txt

Par exemple, il faudrait que ca donne :
pseudo1 (250 €)
pseudo2 (10€)
pseudo3 (100€)
etc...

Avant d'arriver a quoique ce soit, il faut deja definir, comment realiser la chose.
Faut-il conserver que les pseudos (en retirant les infos superflus) + les gains, ensuite additionner ?
Faut-il conserver que les pseudos (en retirant les infos superflus) + les gains, ensuite trier par ordre alphabetique les pseudos, puis additionner les gains liés a ses pseudos ?

Il faut definir la méthode, puis connaitre les bonnes commandes :-/

A moins que ce ne soit pas possible a faire


Voici quand meme le texte des resultats (la taille max sera de 100 lignes)

JEUDI 05 JUILLET 2018 - SOIR : MICROSEB : X1 (06,21,37,56) [4/7]▶ 2 € X1 -------- ★★ 2 € ★★
JEUDI 05 JUILLET 2018 - SOIR : MICROSEB : X1 (06,21,65,66) [4/7]▶ 2 € X1 -------- ★★ 2 € ★★
JEUDI 05 JUILLET 2018 - SOIR : MICROSEB : X1 (06,21) [2/3]▶ 2 € X1 -------- ★★ 2 € ★★
JEUDI 05 JUILLET 2018 - SOIR : MICROSEB : X1 (06,37) [2/3]▶ 2 € X1 -------- ★★ 2 € ★★
JEUDI 05 JUILLET 2018 - SOIR : MICROSEB : X1 (21,59) [2/3]▶ 2 € X1 -------- ★★ 2 € ★★
JEUDI 05 JUILLET 2018 - SOIR : MICROSEB : X1 (06,21) [2/3]▶ 2 € X1 -------- ★★ 2 € ★★
JEUDI 05 JUILLET 2018 - MIDI : MAGNETICO : X1 (06,07,09,69) [4/6]▶ 2 € X1 -------- ★★ 2 € ★★
MERCREDI 04 JUILLET 2018 - SOIR : ELSIE : X1 (31,37,16) [3/4]▶ 5 € X1 -------- ★★ 5 € ★★
MERCREDI 04 JUILLET 2018 - SOIR : ELSIE : X1 (31,37,15) [3/4]▶ 5 € X1 -------- ★★ 5 € ★★
MERCREDI 04 JUILLET 2018 - SOIR : ELSIE : X1 (31,37,14) [3/4]▶ 5 € X1 -------- ★★ 5 € ★★
MERCREDI 04 JUILLET 2018 - SOIR : ELSIE : X1 (31,37,10) [3/4]▶ 5 € X1 -------- ★★ 5 € ★★


----------



## flotow (6 Juillet 2018)

```
cat monFichier | grep :*: | sort -u | wc -l
```

par contre, ça te trie les pseudos en même temps !


----------



## symbol (6 Juillet 2018)

Flotow, merci mais t'es a coté de la question.


----------



## flotow (6 Juillet 2018)

symbol a dit:


> Flotow, merci mais t'es a coté de la question.


Effectivement...
Un petit script Perl... ?

Ou alors awk pour selectionner les infos puis ?

@ecatomb ?


----------



## daffyb (6 Juillet 2018)

J'ai une petite conclusion à l'ensemble des messages que tu as produit @symbol
Il aurait été vachement judicieux, dès le début, de définir tes besoins, plutôt que d'empiler petit à petit les fonctionnalités.
Si toutes tes données avaient été remontées dans une petite base de données, tu aurais pu faire n'importe quoi sans grande difficulté.

Là, tu réalises des opérations de base de données dans un fichier texte. C'est fort dommage, mais il n'est pas trop tard pour faire bien


----------



## flotow (6 Juillet 2018)

@symbol : tu peux aussi partager l'ensemble du code que tu as écrit, par exemple sur github


----------



## zeltron54 (6 Juillet 2018)

Bonjour,

pour compter les occurrences, essai:
awk '! /^[[:space:]]*$/ {print $(NF-12)}' monfichier | sort -f |uniq -c

ou en comptant depuis le début:
awk '! /^[[:space:]]*$/ {print $(8)}' monfichier.txt | sort -f |uniq -c


----------



## symbol (6 Juillet 2018)

@daffyb

Le commencement :
J'ai monté un tout petit forum sur le theme du jeu KENO.
Au début les membres (9), postaient les pronos dans le forum.

J'ai trouvé sympa de pouvoir afficher le tirage (données extraites du site FDJ) et comparer les pronos des membres + leurs gains directement dans le forum d'une facon automatisée.
Grace a plusieurs d'entre vous, cela à été possible, grace a un script qui est lancé sur mon Mac a 14h15 et 21h15, puis envoi les résultats vers un FTP.

De ce FTP, le forum va chercher un JPG, un PDF, MP3 généré par le script.

Du coup, j'avance pas a pas dans ce petit projet perso.

Je n'ai pas pensé la réalisation avant.
J'ajoute quelques lignes de code (dont votre aide est essentielle), qui peuvent dans la limite du possible manipuler les datas existantes et créer de nouveau résultats affichables.

Mettre une base de données en place, je n'ai pas le niveau pour le faire, ca me semble encore plus compliqué.

D'un point de résultat, je trouve qu'un script peut faire plein de choses formidables 

Peut être qu'on arrive a la limite possibilités d'un script.

Je voulais expliquer le "pourquoi comment" de l'évolution des choses 



@Zeltron
Je vais tester tes commandes avec grand interet.


----------



## daffyb (6 Juillet 2018)

symbol a dit:


> @daffyb
> 
> Le commencement :
> J'ai monté un tout petit forum sur le theme du jeu KENO.
> ...


Je sais bien, car j'ai suivi et participé à tes posts.
Le passage à la base de données n'est pas plus compliqué que faire des scripts.
Jette y un oeil, ne serait ce que pour apprendre un nouveau truc.


----------



## symbol (6 Juillet 2018)

@zeltron54 

excellent


----------



## symbol (6 Juillet 2018)

@zeltron54

J'ai légèrement modifié le code de base, afin de trier le rendu par ordre croissant, et mettre le resultat sur 1 seule ligne (retrait du de retour chariot)


```
awk '! /^[[:space:]]*$/ {print $(8)}' /Users/xxx/Desktop/KENODATA/RESULTATSHISTORIQUE.txt | sort -f |uniq -c | sort -r -n | tr -d '\n' > /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt
```


----------



## symbol (7 Juillet 2018)

Ca ne me donne pas le total des gains en € (uniquement le nombre de grilles gagantes sur les 100 derniers tirages), mais c'est deja un début


----------



## symbol (7 Juillet 2018)

@daffyb

Je me souviens très bien de tes interventions, d'un grand intéret.


----------



## symbol (7 Juillet 2018)

@zeltron54

Dans ta commande "awk '! /^[[:space:]]*$/ {print $(8)}' /Users/xxx/Desktop/KENODATA/RESULTATSHISTORIQUE.txt | sort -f |uniq -c"
A quoi sert {print $(8)}' ?

merci

Vu que je peux pas effacer ce message- > c'est bon j'ai compris 


J'ai essayé :

```
awk '! /^[[:space:]]*$/ {print $(8)} {print$(18)}' /Users/xxx/Desktop/KENODATA/RESULTATSHISTORIQUE.txt | sort -f
```

Je pensais que ca allait m'afficher 
PSEUDO GAIN
PSEUDO GAIN
PSEUDO GAIN
PSEUDO GAIN
...

en réalité ca affiche 
GAIN
GAIN
GAIN
GAIN
PSEUDO
PSEUDO
PSEUDO
etc...


----------



## Membre supprimé 1129907 (7 Juillet 2018)

Pour afficher plusieurs variables sur la même ligne :

```
printf "%s %s\n",variable1,variable2
```
Les %s seront remplacés par la variable
Le \n est le retour chariot unix


----------



## symbol (7 Juillet 2018)

ecatomb, je comprends pas :-/


```
awk '! /^[[:space:]]*$/ {print $(8)} {print$(18)}' /Users/xxx/Desktop/KENODATA/RESULTATSHISTORIQUE.txt
```

me donne

ELSIE
€
ELSIE
€
ELSIE
€
MAGNETICO
30
MAGNETICO
2
ELSIE
5
ELSIE
5
ELSIE
2
ELSIE
2
MICROSEB
2


j'essai 
	
	



```
awk '! /^[[:space:]]*$/ printf "%s %s\n",variable1,variable2 /Users/xxx/Desktop/KENODATA/RESULTATSHISTORIQUE.txt
```

ca donne rien, le terminal reste bloqué.

J'essai ca aussi

```
awk '! /^[[:space:]]*$/ printf "%s %s\n",$(8),$(18) /Users/xxx/Desktop/KENODATA/RESULTATSHISTORIQUE.txt
```

pas mieux LOL 

En fait je vois pas ou faut placer -> printf "%s %s\n",variable1,variable2

Je voulais retirer le saut de ligne, j'ai essayé

```
tr '\n' ' ' < /Users/xxx/Desktop/RESULTATSTATS.txt > /Users/xxx/Desktop/RESULTATSTATS1.txt
```

Du coup, ca fonctionne mais, ca donne :
MAGNETICO 30 MAGNETICO 2 ELSIE 5 ELSIE 5 ELSIE 2 ELSIE 2 MICROSEB 2 MICROSEB 2 MICROSEB 2 MICROSEB 2 MICROSEB 2 MICROSEB 2 MICROSEB 2 MAGNETICO 2 ELSIE 5 ELSIE 5 ELSIE 5 ELSIE 5

Je voulais que les pseudo + gains soient les uns en dessous des autres.


----------



## Membre supprimé 1129907 (7 Juillet 2018)

Peux-tu poster une ligne de ton fichier source et ce que tu veux avoir à la place ? Je te donnerais la ligne à avoir (plus simple)


----------



## symbol (7 Juillet 2018)

J'ai mis les fichiers, et ma demande
https://workupload.com/file/KLhkMb8

Merci 

Voici le code utilisé  (mais demande est plus evoluée que ce qu'il fait actuellement)


```
############################################################################################
####  SORTIE DES STATS VERS FICHIER TEXTE (nombre de tirages gagnants triés decroissant + etoiles) #####
############################################################################################
# compte combien occurence d'un même pseudo
awk '! /^[[:space:]]*$/ {print $(8)}' /Users/xxx/Desktop/KENODATA/RESULTATSHISTORIQUE.txt | sort -f |uniq -c | sort -r -n | tr -d '\n' > /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt

## Ajout du mot "CLASSEMENT : " avant les PSEUDOS
cat /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt > /Users/xxx/Desktop/KENODATA/RESULTATSTATS-tmp.txt
sed 's/^/ NOMBRE DE GRILLES GAGNANTES DES 100 DERNIERS TIRAGES: /' /Users/xxx/Desktop/KENODATA/RESULTATSTATS-tmp.txt >  /Users/xxx/Desktop/KENODATA/RESULTATSTATS-tmp1.txt
sed  "s/   /         /g"  /Users/xxx/Desktop/KENODATA/RESULTATSTATS-tmp1.txt >  /Users/xxx/Desktop/KENODATA/RESULTATSTATS-tmp2.txt
cat /Users/xxx/Desktop/KENODATA/RESULTATSTATS-tmp2.txt > /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt
rm -f /Users/xxx/Desktop/KENODATA/RESULTATSTATS-tmp.txt
rm -f /Users/xxx/Desktop/KENODATA/RESULTATSTATS-tmp1.txt
rm -f /Users/xxx/Desktop/KENODATA/RESULTATSTATS-tmp2.txt
```


----------



## Membre supprimé 1129907 (7 Juillet 2018)

A toi de voir quelle version tu préfères, la V1 ou la V2 


```
#!/bin/bash

#V1
# Donne :
#ELSIE 34 €   MICROSEB 14 €   MAGNETICO 34 €
awk '{
  split($0,ligne," : ")
  #$0 = VENDREDI 06 JUILLET 2018 - SOIR : MAGNETICO : X1 [5/6]▶ 30 € X1 -------- ★★ 30 € ★★
  #ligne[1] = VENDREDI 06 JUILLET 2018 - SOIR
  #ligne[2] = MAGNETICO
  #ligne[3] = X1 [5/6]▶ 30 € X1 -------- ★★ 30 € ★★

  joueur=ligne[2]

  #Pour ne garder que le 30 dans la partie : ★★ 30 € ★★
  gain_start=index(ligne[3],"★★")+7
  gain_end=index(ligne[3]," € ★★")
  gain=substr(ligne[3],gain_start,gain_end-gain_start)

  #Tableau contenant les gains par joueur
  tableau[joueur]=tableau[joueur]+gain
}
END {
  for (joueur in tableau)
  {
    printf "%s %s €   ",joueur,tableau[joueur]
  }
  printf "\n"
}
' RESULTATSHISTORIQUE.txt

#v2
# Donne :
#MAGNETICO   34 €
#ELSIE   34 €
#MICROSEB   14 €
awk '{
  split($0,ligne," : ")
  #$0 = VENDREDI 06 JUILLET 2018 - SOIR : MAGNETICO : X1 [5/6]▶ 30 € X1 -------- ★★ 30 € ★★
  #ligne[1] = VENDREDI 06 JUILLET 2018 - SOIR
  #ligne[2] = MAGNETICO
  #ligne[3] = X1 [5/6]▶ 30 € X1 -------- ★★ 30 € ★★

  joueur=ligne[2]

  #Pour ne garder que le 30 dans la partie : ★★ 30 € ★★
  gain_start=index(ligne[3],"★★")+7
  gain_end=index(ligne[3]," € ★★")
  gain=substr(ligne[3],gain_start,gain_end-gain_start)

  #Tableau contenant les gains par joueur
  tableau[joueur]=tableau[joueur]+gain
}
END {
  for (joueur in tableau)
  {
    printf "%s:%s\n",joueur,tableau[joueur]
  }
}
' RESULTATSHISTORIQUE.txt | sort -t':' -k2 -nr | sed "s/^\(.*\):\(.*\)$/\1   \2 €/"
```


----------



## zeltron54 (7 Juillet 2018)

Bonsoir,
ecatomb à l'air de te trouver une solution en commande shell.

Comme je ne connais pas assez le shell je t'ai fais un petit script applescript qui fait le job.
Il récupère le fichier "mon fichier" sur le bureau et, après traitement produit un fichier "RESULTATSTATS.txt" sur le bureau, ce fichier contient le nombre d'occurrences de chaque nom, le nom et le total des gains de ce nom.

Ne pas oublier de compléter (2 fois) le chemin du fichier mon fichier en remplaçant  XXXX par ton nom utilisateur.

A toi de voir ce qui te conviens le mieux.


```
tell application "Finder"
    set cmd to "awk '! /^[[:space:]]*$/ {print $(8) " & "ORS" & " $(NF-2)}' "
    set liste to do shell script cmd & quoted form of "/Users/XXXXXX/Desktop/mon fichier.txt"
    set laList to {}
    set n to count paragraph of liste
    repeat with i from 1 to n
        copy paragraph i of liste to the end of laList
    end repeat
  
    set cmd to "awk '! /^[[:space:]]*$/ {print $(8)}' "
    set liste to do shell script cmd & quoted form of "/Users/XXXXX/Desktop/mon fichier.txt"
    set listnom to {}
    set n to count paragraph of liste
    repeat with i from 1 to n
        copy paragraph i of liste to the end of listnom
    end repeat
  
    set prov to {}
    set listnomuni to {}
  
    repeat
        if (count of listnom) > 0 then
            set nom to item 1 of listnom
            copy nom to the end of listnomuni
            repeat with i from 1 to count listnom
                if item i of listnom = nom then
                else
                    copy item i of listnom to the end of prov
                end if
            end repeat
          
            set listnom to prov
            set prov to {}
        else
            exit repeat
        end if
    end repeat
  
  
    repeat with j from 1 to (count of listnomuni)
        set nom to item j of listnomuni
        set gain to 0
        set NG to 0
        set NB to count of laList
      
        repeat with i from 1 to NB
          
            if item i of laList = nom then
                set NG to NG + 1
                set gain to gain + (item (i + 1) of laList)
            end if
          
        end repeat
      
        set NG to NG as string
        set nom to nom as string
        set gain to gain as string
      
        set RESULTATSTATS to open for access (path to desktop folder as text) & "RESULTATSTATS.txt" as text with write permission
        write NG & "  " & nom & "  " & gain & return to RESULTATSTATS starting at eof
        close access RESULTATSTATS
    end repeat
end tell
```


----------



## symbol (8 Juillet 2018)

Bonjour a vous 2 

Je regarde (et essai de bien comprendre votre travail).
Je vais tester cet aprem, a tete reposée.

Je reviens vers vous aussitot 

X10 merci


----------



## Membre supprimé 1129907 (8 Juillet 2018)

J'ai mis pas mal de commentaire dans ma version, je me sers des tableaux qui sont bien pratique sous linux


----------



## zeltron54 (8 Juillet 2018)

@ symbol
En relisant tes demandes je viens de te refaire un script qui te fait le job
Il faut que tu renseignes (comme d'habitude) les adresses du fichier historique et du fichier stat (les 2 premières lignes du script)
 Le fichier stat est effacé et recréé à chaque exécution du script .


```
tell application "Finder"
    set cheminhisto to "/Users/XXXX/Desktop/mon fichier.txt"
    set cheminstat to "/Users/XXXX/Desktop/"
    set cmd to "awk '! /^[[:space:]]*$/ {print $(8) " & "ORS" & " $(NF-2)}' "
    set liste to do shell script cmd & quoted form of cheminhisto
    set laList to {}
    set n to count paragraph of liste
    repeat with i from 1 to n
        copy paragraph i of liste to the end of laList
    end repeat
  
    set RESULTATSTATS to open for access (cheminstat as text) & "RESULTATSTATS.txt" as text with write permission
    set eof (cheminstat & "RESULTATSTATS.txt") to 0
    close access RESULTATSTATS
  
    repeat
        set nom to item 1 of laList
        set gain to 0
        set NG to 0
        set NB to count of laList
        set i to 1
        set prov to {}
      
        repeat
            if item i of laList = nom then
                set NG to NG + 1
                set gain to gain + (item (i + 1) of laList)
            else
                copy item i of laList to the end of prov
                copy item (i + 1) of laList to the end of prov
            end if
            set i to i + 2
            if i > NB - 1 then
                exit repeat
            end if
        end repeat
      
        set laList to prov
        set prov to {}
      
        set NG to NG as string
        set nom to nom as string
        set gain to gain as string
      
        set RESULTATSTATS to open for access (cheminstat as text) & "RESULTATSTATS.txt" as text with write permission
        write NG & "  " & nom & "  " & gain & return to RESULTATSTATS starting at eof
        close access RESULTATSTATS
      
        if (count of laList) < 1 then
            exit repeat
        end if
    end repeat
end tell
```


----------



## symbol (8 Juillet 2018)

Me revoila

J'ai commencé par la V1 d'ecatombe.
- J'ai remplacé le code d'origine (posté a 18h28) par le code la V1
Du coup ca donne rien. Le script fonctionne, tout est pareil (je ne vois pas -> "ELSIE 34 €   MICROSEB 14 €   MAGNETICO 34 €" )
Je vois "NOMBRE DE GRILLES GAGNANTES DES 100 DERNIERS TIRAGES:         27 ELSIE  18 MAGNETICO  14 MICROSEB
"

Je me suis dit qu'il fallait pas remplacer le code d'origine (posté a 18h28), mais ajouté la V1 juste a la suite.
- J'ai ajouté a la suite du code d'origine la version V1
Du coup ca donne rien. Le script fonctionne, tout est pareil (je ne vois pas -> "ELSIE 34 €   MICROSEB 14 €   MAGNETICO 34 €" )
Je vois "NOMBRE DE GRILLES GAGNANTES DES 100 DERNIERS TIRAGES:         27 ELSIE  18 MAGNETICO  14 MICROSEB
"

Idem pour la V2

Il est evident que je fais mal un truc mais quoi ???  :-/
J'ai pas mis le code au bon endroit ?



```
############################################################################################
####  SORTIE DES STATS VERS FICHIER TEXTE (nombre de tirages gagnants triés decroissant + etoiles) #####
############################################################################################
    # compte combien occurence d'un même pseudo
    awk '! /^[[:space:]]*$/ {print $(8)}' /Users/xxx/Desktop/KENODATA/RESULTATSHISTORIQUE.txt | sort -f |uniq -c | sort -r -n | tr -d '\n' > /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt

    ## Ajout du mot "CLASSEMENT : " avant les PSEUDOS
    cat /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt > /Users/xxx/Desktop/KENODATA/RESULTATSTATS-tmp.txt
    sed 's/^/ NOMBRE DE GRILLES GAGNANTES DES 100 DERNIERS TIRAGES: /' /Users/xxx/Desktop/KENODATA/RESULTATSTATS-tmp.txt >  /Users/xxx/Desktop/KENODATA/RESULTATSTATS-tmp1.txt
    sed  "s/   /         /g"  /Users/xxx/Desktop/KENODATA/RESULTATSTATS-tmp1.txt >  /Users/xxx/Desktop/KENODATA/RESULTATSTATS-tmp2.txt
    cat /Users/xxx/Desktop/KENODATA/RESULTATSTATS-tmp2.txt > /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt
    rm -f /Users/xxx/Desktop/KENODATA/RESULTATSTATS-tmp.txt
    rm -f /Users/xxx/Desktop/KENODATA/RESULTATSTATS-tmp1.txt
    rm -f /Users/xxx/Desktop/KENODATA/RESULTATSTATS-tmp2.txt
   
#v2
# Donne :
#MAGNETICO   34 €
#ELSIE   34 €
#MICROSEB   14 €
awk '{
  split($0,ligne," : ")
  #$0 = VENDREDI 06 JUILLET 2018 - SOIR : MAGNETICO : X1 [5/6]▶ 30 € X1 -------- ★★ 30 € ★★
  #ligne[1] = VENDREDI 06 JUILLET 2018 - SOIR
  #ligne[2] = MAGNETICO
  #ligne[3] = X1 [5/6]▶ 30 € X1 -------- ★★ 30 € ★★

  joueur=ligne[2]

  #Pour ne garder que le 30 dans la partie : ★★ 30 € ★★
  gain_start=index(ligne[3],"★★")+7
  gain_end=index(ligne[3]," € ★★")
  gain=substr(ligne[3],gain_start,gain_end-gain_start)

  #Tableau contenant les gains par joueur
  tableau[joueur]=tableau[joueur]+gain
}
END {
  for (joueur in tableau)
  {
    printf "%s:%s\n",joueur,tableau[joueur]
  }
}
' RESULTATSHISTORIQUE.txt | sort -t':' -k2 -nr | sed "s/^\(.*\):\(.*\)$/\1   \2 €/"
```


----------



## Membre supprimé 1129907 (8 Juillet 2018)

Rajoute ceci à la fin, le résultat n'étant affiché qu'à l'écran dans ma version

```
> /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt
```


----------



## symbol (8 Juillet 2018)

Ecatomb

Je t'ai fais une video de ce qui se passe ici (m4v)
https://workupload.com/file/F7mgsz7

Le fichier /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt reste vide, alors qu'on voit dans la video defiler dans le terminal, les PSEUDOS+GAIN €, bien que j'ai ajouté "> /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt" pour assuré une sortie vers le fichier adequat


----------



## zeltron54 (8 Juillet 2018)

Symbol

Au vu de ta vidéo, j'ai modifié le script que je te joins, il est prêt à être utilisé.
Dis-moi si cela fonctionne.


```
tell application "Finder"
    set cheminhisto to "/Users/xxx/Desktop/KENODATA/RESULTATSHISTORIQUE.txt"
    set cheminstat to "/Users/xxx/Desktop/KENODATA/"
    set cmd to "awk '! /^[[:space:]]*$/ {print $(8) " & "ORS" & " $(NF-2)}' "
    set liste to do shell script cmd & quoted form of cheminhisto
    set laList to {}
    set n to count paragraph of liste
    repeat with i from 1 to n
        copy paragraph i of liste to the end of laList
    end repeat
   
    set RESULTATSTATS to open for access (cheminstat as text) & "RESULTATSTATS.txt" as text with write permission
    set eof (cheminstat & "RESULTATSTATS.txt") to 0
    close access RESULTATSTATS
   
    repeat
        set nom to item 1 of laList
        set gain to 0
        set NG to 0
        set NB to count of laList
        set i to 1
        set prov to {}
       
        repeat
            if item i of laList = nom then
                set NG to NG + 1
                set gain to gain + (item (i + 1) of laList)
            else
                copy item i of laList to the end of prov
                copy item (i + 1) of laList to the end of prov
            end if
            set i to i + 2
            if i > NB - 1 then
                exit repeat
            end if
        end repeat
       
        set laList to prov
        set prov to {}
       
        set NG to NG as string
        set nom to nom as string
        set gain to gain as string
       
        set RESULTATSTATS to open for access (cheminstat as text) & "RESULTATSTATS.txt" as text with write permission
        write NG & "  " & nom & "  " & gain & return to RESULTATSTATS starting at eof
        close access RESULTATSTATS
       
        if (count of laList) < 1 then
            exit repeat
        end if
    end repeat
end tell
```


----------



## Membre supprimé 1129907 (8 Juillet 2018)

A priori, tu as sauté une ligne avant de mettre la fin. On voit bien le bon résultat dans la vidéo à 0:15

C'est ceci qu'il faut avoir :

```
############################################################################################
####  SORTIE DES STATS VERS FICHIER TEXTE (nombre de tirages gagnants triés decroissant + etoiles) #####
############################################################################################
    # compte combien occurence d'un même pseudo
    awk '! /^[[:space:]]*$/ {print $(8)}' /Users/xxx/Desktop/KENODATA/RESULTATSHISTORIQUE.txt | sort -f |uniq -c | sort -r -n | tr -d '\n' > /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt

    ## Ajout du mot "CLASSEMENT : " avant les PSEUDOS
    cat /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt > /Users/xxx/Desktop/KENODATA/RESULTATSTATS-tmp.txt
    sed 's/^/ NOMBRE DE GRILLES GAGNANTES DES 100 DERNIERS TIRAGES: /' /Users/xxx/Desktop/KENODATA/RESULTATSTATS-tmp.txt >  /Users/xxx/Desktop/KENODATA/RESULTATSTATS-tmp1.txt
    sed  "s/   /         /g"  /Users/xxx/Desktop/KENODATA/RESULTATSTATS-tmp1.txt >  /Users/xxx/Desktop/KENODATA/RESULTATSTATS-tmp2.txt
    cat /Users/xxx/Desktop/KENODATA/RESULTATSTATS-tmp2.txt > /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt
    rm -f /Users/xxx/Desktop/KENODATA/RESULTATSTATS-tmp.txt
    rm -f /Users/xxx/Desktop/KENODATA/RESULTATSTATS-tmp1.txt
    rm -f /Users/xxx/Desktop/KENODATA/RESULTATSTATS-tmp2.txt

awk '{
  split($0,ligne," : ")
  #$0 = VENDREDI 06 JUILLET 2018 - SOIR : MAGNETICO : X1 [5/6]▶ 30 € X1 -------- ★★ 30 € ★★
  #ligne[1] = VENDREDI 06 JUILLET 2018 - SOIR
  #ligne[2] = MAGNETICO
  #ligne[3] = X1 [5/6]▶ 30 € X1 -------- ★★ 30 € ★★

  joueur=ligne[2]

  #Pour ne garder que le 30 dans la partie : ★★ 30 € ★★
  gain_start=index(ligne[3],"★★")+7
  gain_end=index(ligne[3]," € ★★")
  gain=substr(ligne[3],gain_start,gain_end-gain_start)

  #Tableau contenant les gains par joueur
  tableau[joueur]=tableau[joueur]+gain
}
END {
  for (joueur in tableau)
  {
    printf "%s %s €   ",joueur,tableau[joueur]
  }
  printf "\n"
}
' RESULTATSHISTORIQUE.txt > /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt
```


----------



## symbol (8 Juillet 2018)

Effectivement ca change tout


----------



## symbol (8 Juillet 2018)

Maintenant que ca semble réglé, je vais jeter un oeil a la V2, et au travail de Zeltron54

J'arrive au terme de mon projet, sans votre aide,rien n'aurait été possible.
Je remercie tous les acteurs qui ont participé +macg.co pour ce lieu de partage et d'aide.


----------



## Membre supprimé 1129907 (8 Juillet 2018)

Le "> fichier" redirige ce qui devait s'afficher à l'écran (hors erreurs et messages spécifiques)  dans le fichier indiqué.
S'il n'y a rien avant, cela crée un fichier vide. D'où ton problème.


----------



## symbol (8 Juillet 2018)

Y'a t-il autre moyen (ou un subterfuge)  pour afficher le symbole "€" car dans le forum ca ressort comme un caractere erroné ?


----------



## Membre supprimé 1129907 (8 Juillet 2018)

Met ceci à la place du € dans le printf, c'est le code ISO pour le € :

```
&#8364;
```


----------



## symbol (8 Juillet 2018)

loupé 






J'ai l'impression qu'il sera peut etre plus simple d'inserer un gif de "€"


----------



## Membre supprimé 1129907 (8 Juillet 2018)

Chez moi ça fonctionne bien 




Par contre, ma page web est en UTF8.  Il y a ce code dans la partie "head" du fichier html. Si je ne l'ai pas, j'obtiens ceci :

```
<meta charset="UTF-8">
```






Exemple de page avec le codage UTF8 et les deux € qui fonctionnent :

```
<!DOCTYPE html>
<html lang="fr">
<head>
  <title>Titre</title>
  <meta charset="UTF-8">
</head>
<body>
  <main>
  €<br/>&#8364;
  </main>
</body>
</html>
```


----------



## symbol (8 Juillet 2018)

Il se trouve que le texte du fichier RESULTATSTATS.txt s'affiche ici


```
<!-- ######################################################################################################################  -->
<!-- AFFICHAGE RESULTATSTATS au FORMAT TXT -->
<div style="overflow:hidden; overflow-x:hidden;  width:1000px; height:50px; border:#000000 0px solid;">
<object data="http://kenopronos.free.fr/RESULTATSTATS.txt" type="text/html"  width="100%" height="600%"></object>
</div>
```


----------



## Membre supprimé 1129907 (8 Juillet 2018)

Sur la page du forum : clic droit > "afficher le code source"
Cela te permettra de voir tout le code html et donc s'il y a un charset d'indiqué au tout début.

Teste quand même ceux-là :

```
&#x20AC;
&euro;
```

Sinon, tu peux aussi mettre EUR ^^

ps: si un nom a un caractère spécial, ça risque de mal s'afficher.


----------



## symbol (8 Juillet 2018)

```
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge"><script type="text/javascript">window.NREUM||(NREUM={}),__nr_require=function(e,n,t){function r(t){if(!n[t]){var o=n[t]={exports:{}};e[t][0].call(o.exports,function(n){var o=e[t][1][n];return r(o||n)},o,o.exports)}return n[t].exports}if("function"==typeof __nr_require)return __nr_require;for(var o=0;o<t.length;o++)r(t[o]);return r}({1:[function(e,n,t){function r(){}function o(e,n,t){return function(){return i(e,[c.now()].concat(u(arguments)),n?null:this,t),n?void 0:this}}var i=e("handle"),a=e(2),u=e(3),f=e("ee").get("tracer"),c=e("loader"),s=NREUM;"undefined"==typeof window.newrelic&&(newrelic=s);var p=["setPageViewName","setCustomAttribute","setErrorHandler","finished","addToTrace","inlineHit","addRelease"],d="api-",l=d+"ixn-";a(p,function(e,n){s[n]=o(d+n,!0,"api")}),s.addPageAction=o(d+"addPageAction",!0),s.setCurrentRouteName=o(d+"routeName",!0),n.exports=newrelic,s.interaction=function(){return(new r).get()};var m=r.prototype={createTracer:function(e,n){var t={},r=this,o="function"==typeof n;return i(l+"tracer",[c.now(),e,t],r),function(){if(f.emit((o?"":"no-")+"fn-start",[c.now(),r,o],t),o)try{return n.apply(this,arguments)}finally{f.emit("fn-end",[c.now()],t)}}}};a("setName,setAttribute,save,ignore,onEnd,getContext,end,get".split(","),function(e,n){m[n]=o(l+n)}),newrelic.noticeError=function(e){"string"==typeof e&&(e=new Error(e)),i("err",[e,c.now()])}},{}],2:[function(e,n,t){function r(e,n){var t=[],r="",i=0;for(r in e)o.call(e,r)&&(t[i]=n(r,e[r]),i+=1);return t}var o=Object.prototype.hasOwnProperty;n.exports=r},{}],3:[function(e,n,t){function r(e,n,t){n||(n=0),"undefined"==typeof t&&(t=e?e.length:0);for(var r=-1,o=t-n||0,i=Array(o<0?0:o);++r<o;)i[r]=e[n+r];return i}n.exports=r},{}],4:[function(e,n,t){n.exports={exists:"undefined"!=typeof window.performance&&window.performance.timing&&"undefined"!=typeof window.performance.timing.navigationStart}},{}],ee:[function(e,n,t){function r(){}function o(e){function n(e){return e&&e instanceof r?e:e?f(e,u,i):i()}function t(t,r,o,i){if(!d.aborted||i){e&&e(t,r,o);for(var a=n(o),u=m(t),f=u.length,c=0;c<f;c++)u[c].apply(a,r);var p=s[y[t]];return p&&p.push([b,t,r,a]),a}}function l(e,n){v[e]=m(e).concat(n)}function m(e){return v[e]||[]}function w(e){return p[e]=p[e]||o(t)}function g(e,n){c(e,function(e,t){n=n||"feature",y[t]=n,n in s||(s[n]=[])})}var v={},y={},b={on:l,emit:t,get:w,listeners:m,context:n,buffer:g,abort:a,aborted:!1};return b}function i(){return new r}function a(){(s.api||s.feature)&&(d.aborted=!0,s=d.backlog={})}var u="nr@context",f=e("gos"),c=e(2),s={},p={},d=n.exports=o();d.backlog=s},{}],gos:[function(e,n,t){function r(e,n,t){if(o.call(e,n))return e[n];var r=t();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,n,{value:r,writable:!0,enumerable:!1}),r}catch(i){}return e[n]=r,r}var o=Object.prototype.hasOwnProperty;n.exports=r},{}],handle:[function(e,n,t){function r(e,n,t,r){o.buffer([e],r),o.emit(e,n,t)}var o=e("ee").get("handle");n.exports=r,r.ee=o},{}],id:[function(e,n,t){function r(e){var n=typeof e;return!e||"object"!==n&&"function"!==n?-1:e===window?0:a(e,i,function(){return o++})}var o=1,i="nr@id",a=e("gos");n.exports=r},{}],loader:[function(e,n,t){function r(){if(!x++){var e=h.info=NREUM.info,n=d.getElementsByTagName("script")[0];if(setTimeout(s.abort,3e4),!(e&&e.licenseKey&&e.applicationID&&n))return s.abort();c(y,function(n,t){e[n]||(e[n]=t)}),f("mark",["onload",a()+h.offset],null,"api");var t=d.createElement("script");t.src="https://"+e.agent,n.parentNode.insertBefore(t,n)}}function o(){"complete"===d.readyState&&i()}function i(){f("mark",["domContent",a()+h.offset],null,"api")}function a(){return E.exists&&performance.now?Math.round(performance.now()):(u=Math.max((new Date).getTime(),u))-h.offset}var u=(new Date).getTime(),f=e("handle"),c=e(2),s=e("ee"),p=window,d=p.document,l="addEventListener",m="attachEvent",w=p.XMLHttpRequest,g=w&&w.prototype;NREUM.o={ST:setTimeout,SI:p.setImmediate,CT:clearTimeout,XHR:w,REQ:p.Request,EV:p.Event,PR:p.Promise,MO:p.MutationObserver};var v=""+location,y={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net",agent:"js-agent.newrelic.com/nr-1044.min.js"},b=w&&g&&g[l]&&!/CriOS/.test(navigator.userAgent),h=n.exports={offset:u,now:a,origin:v,features:{},xhrWrappable:b};e(1),d[l]?(d[l]("DOMContentLoaded",i,!1),p[l]("load",r,!1)):(d[m]("onreadystatechange",o),p[m]("onload",r)),f("mark",["firstbyte",u],null,"api");var x=0,E=e(4)},{}]},{},["loader"]);</script>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="description" content="forum de pronos du jeu Keno">
        <meta name="author" content="Free-bb">
        <link rel="icon" href="http://forum.free-bb.com/favicon.ico">
        <title>KenoPronos</title>
        <link rel="stylesheet" href="/css/fc.min.css" />
```


----------



## Membre supprimé 1129907 (8 Juillet 2018)

Donc c'est bien codé en UTF8 ... Bizarre.


----------



## symbol (8 Juillet 2018)

Tant pis je vais laisser "Euros" au lieu de "€"


----------



## symbol (9 Juillet 2018)

a supprimer SVP. Merci


----------



## Membre supprimé 1129907 (9 Juillet 2018)

Peut-être que tu as des espaces dans tes nombres ? Je ne sais pas si cela pose problème ou non. Dans le doute rajoute ceci après la ligne du substr (en espérant ne pas me tromper) :

```
gsub(" ","",gain)
```

Dans le cas contraire, pourras-tu m'envoyer le fichier avec tous les gains que j'analyse ça ce soir ?


----------



## symbol (9 Juillet 2018)

Ecatomb,

Je crois que l'erreur vient de moi, j'ai laissé un ancien fichier avec des resultats antérieurs, du coup, le calcul a pris ces resultats et les additionnés aux nouveaux, ce qui a donné des montants inexacts.

Je vais voir avec les prochains résultats, si les nouvelles sommes s'additionnent correctement.


----------



## Membre supprimé 1129907 (9 Juillet 2018)

Je préfère ce type d’erreur, c’est plus simple à résoudre


----------



## Membre supprimé 1129907 (9 Juillet 2018)

N’hésites pas à tester l’autre version de mon script qui trie les gagnants. Cela les affiche sur plusieurs ligne mais ce sera peut-être plus joli à voir sur ton forum


----------



## symbol (9 Juillet 2018)

1) Pour le tirage de ce midi (et parfois d'autres tirages), il n'y pas de gagnant.
Le script principal affiche alors la phrase "PAS DE GAGNANT pour ce tirage !"







Du coup ta partie du script (la partie qui calcul les gains en €), considère "PAS DE GAGANT pour ce tirage" comme un pseudo, de fait, lui attribu alors 0 € de gain.
Serait-il possible d'ajouter une ligne de code pour éviter cela (c'est a dire ne pas afficher "PAS DE GAGANT pour ce tirage"+GAIN) ?

2) La version V2 du script affiche les pseudos+gains verticalement (ce qui est très bien aussi). Mais, Je ne vois pas ou je pourrais caser ces lignes :-/ la page est deja pas mal chargée.

3) Autre petite chose purement esthetique -> Le classement (PSEUDO+GAIN) se fait par ordre croissant, mais basé sur le pseudo et pas sur le gain.
Est-il possible de faire le classement par ordre du gain le plus important au moindre.


Merci

PS : J'essai d'etre le plus précis possible dans mes explications, ce qui peut générer des repétitions, et un excès de précision!


----------



## Membre supprimé 1129907 (9 Juillet 2018)

La v2 fait un classement par gain 
Je regarderais plus en détail tes différents points ce soir


----------



## symbol (9 Juillet 2018)

en attendant quelques modif d'Ecatomb,

Je change un peu la "mise en page" du forum.
Pour consulter le "GAIN CUMULES 100 DERNIERS TIRAGES", ca se situe au dessus de la fenetre du RECAP, suffira de cliquez sur l'icone € (ca ouvrira une fenetre avec le classement selon le script V2 (verticale).
L'ancien affichage sous le RECAP disparait (ou alors peut etre afficher seulement les 3 plus gros PSEUDO+GAIN), je sais pas encore


----------



## Membre supprimé 1129907 (9 Juillet 2018)

Remplace la fin par ceci. Ce devrait être quasi ce que tu veux

```
awk 'END {
  printf "%s:%s\n",joueur,tableau[joueur]
}' RESULTATSHISTORIQUE.txt | sort -t':' -k2 -nr | grep -v "PAS DE GAGANT pour ce tirage" | sed "s/^\(.*\):\(.*\)$/\1 \2 euro(s)  /" | tr "\n" " " > /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt
```


----------



## symbol (9 Juillet 2018)

J'ai remplacé les dernieres lignes par tes 3 lignes, ce qui donne (j'ai pas trop d'indication sur quoi remplacer exactement).


```
############################################################################################
####  SORTIE DES STATS VERS FICHIER TEXTE (nombre de tirages gagnants triés decroissant + etoiles) #####
############################################################################################
# creation d'un fichier vide RESULTATSTATS.txt
> /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt
# ajout de GAINS DES 100 DERNIERS TIRAGES:  avec retour chariot
echo "GAINS DES 100 DERNIERS TIRAGES: " > /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt


    # compte combien occurence d'un même pseudo
#    awk '! /^[[:space:]]*$/ {print $(8)}' /Users/xxx/Desktop/KENODATA/RESULTATSHISTORIQUE.txt | sort -f |uniq -c | sort -r -n | tr -d '\n' > /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt


#v2
# Donne :
#MAGNETICO   34 €
#ELSIE   34 €
#MICROSEB   14 €
awk '{
  split($0,ligne," : ")
  #$0 = VENDREDI 06 JUILLET 2018 - SOIR : MAGNETICO : X1 [5/6]▶ 30 € X1 -------- ★★ 30 € ★★
  #ligne[1] = VENDREDI 06 JUILLET 2018 - SOIR
  #ligne[2] = MAGNETICO
  #ligne[3] = X1 [5/6]▶ 30 € X1 -------- ★★ 30 € ★★

  joueur=ligne[2]

  #Pour ne garder que le 30 dans la partie : ★★ 30 € ★★
  gain_start=index(ligne[3],"★★")+7
  gain_end=index(ligne[3]," € ★★")
  gain=substr(ligne[3],gain_start,gain_end-gain_start)

  #Tableau contenant les gains par joueur
  tableau[joueur]=tableau[joueur]+gain
}
awk 'END {
  printf "%s:%s\n",joueur,tableau[joueur]
}' RESULTATSHISTORIQUE.txt | sort -t':' -k2 -nr | grep -v "PAS DE GAGANT pour ce tirage" | sed "s/^\(.*\):\(.*\)$/\1 \2 euro(s)  /" | tr "\n" " " > /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt

### -------------------------------------------------------------------------------------------------------------------------------------------------
```

Je me retrouve avec une erreur

```
awk: syntax error at source line 18
context is
     >>>  <<<
awk: bailing out at source line 18
```


----------



## Membre supprimé 1129907 (9 Juillet 2018)

Oups, enlève le awk en trop ^^
Remplace :

```
awk 'END {
```

Par :

```
END {
```


----------



## symbol (9 Juillet 2018)

Il n'y pas plus d'erreur, mais j'ai uniquement     MAGNETICO 102 euro(s)   dans le fichier RESULTATSTATS.txt alors que fichier RESULTATSHISTORIQUE.txt contient plein de pseudo et gain

Si tu veux voir les fichiers en temps reel http://kenopronos.free-bb.eu/


----------



## Membre supprimé 1129907 (9 Juillet 2018)

Il faut que j’aille dormir ...
Cette fois, ça doit être bon

```
END {
  for (joueur in tableau)
  {
    printf "%s:%s\n",joueur,tableau[joueur]
  }
}' RESULTATSHISTORIQUE.txt | sort -t':' -k2 -nr | grep -v "PAS DE GAGANT pour ce tirage" | sed "s/^\(.*\):\(.*\)$/\1 \2 euro(s)  /" | tr "\n" " " > /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt
```


----------



## symbol (9 Juillet 2018)

Fais le quand tu as le temps et l'envie, tu passe deja beaucoup de temps la dessus. Bonne et nuit et merci 

MAJ: Après test, ca semble OK avec le code donné en dernier.


----------



## symbol (10 Juillet 2018)

Après 50 tests, tout semble fonctionner nickel.

Y'a juste le classement par ordre de gain (du plus important au plus faible) qui a disparu.
Si eventuellement c'est possible le remettre.

Merci

Le dernier code validé est :

```
############################################################################################
####  SORTIE DES STATS VERS FICHIER TEXTE (nombre de tirages gagnants triés decroissant + etoiles) #####
############################################################################################
# creation d'un fichier vide RESULTATSTATS.txt
# > /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt



#v2
# Donne :
#MAGNETICO   34 €
#ELSIE   34 €
#MICROSEB   14 €
awk '{
  split($0,ligne," : ")
  #$0 = VENDREDI 06 JUILLET 2018 - SOIR : MAGNETICO : X1 [5/6]▶ 30 € X1 -------- ★★ 30 € ★★
  #ligne[1] = VENDREDI 06 JUILLET 2018 - SOIR
  #ligne[2] = MAGNETICO
  #ligne[3] = X1 [5/6]▶ 30 € X1 -------- ★★ 30 € ★★

  joueur=ligne[2]

  #Pour ne garder que le 30 dans la partie : ★★ 30 € ★★
  gain_start=index(ligne[3],"★★")+7
  gain_end=index(ligne[3]," € ★★")
  gain=substr(ligne[3],gain_start,gain_end-gain_start)

  #Tableau contenant les gains par joueur
  tableau[joueur]=tableau[joueur]+gain
}
END {
  for (joueur in tableau)
  {
    printf "%s  > %s   Euro(s)\n",joueur,tableau[joueur]
  }
}' RESULTATSHISTORIQUE.txt | sort -t':' -k2 -nr | grep -v "PAS DE GAGNANT pour ce tirage" | sed "s/^\(.*\):\(.*\)$/\1 \2 euro(s)  /" > /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt
```


----------



## Membre supprimé 1129907 (10 Juillet 2018)

Parce que tu a modifié le printf de mon dernier code


----------



## symbol (10 Juillet 2018)

d'avoir ajouté ">" ca suffit pour empecher le tri :-/

Je remets

```
printf "%s:%s\n",joueur,tableau[joueur]
```


----------



## Membre supprimé 1129907 (10 Juillet 2018)

C’est cette partie là qui fait un tri numérique sur la partie après le premier « : » (donc la deuxième colonne correspondant aux gains)

```
sort -t':' -k2 -nr
```
Cela ne marchera pas avec ton printf

Le sed s’occupera ensuite de reformater l’affichage : partie \1 et partie \2

```
sed "s/^\(.*\):\(.*\)$/\1 \2 euro(s)  /"
```

Version du sed avec le > :

```
sed "s/^\(.*\):\(.*\)$/\1  > \2 Euro(s)  /"
```
Cela devrait donner l’équivalent de ton dernier printf


----------



## symbol (10 Juillet 2018)

Nickel 

Je regardais la commande d'insertion (insertion sans effacer le texte deja présent) de texte a la toute premier ligne d'un fichier texte.
J'ai trouvé :

```
sed "1i\mon_texte \n " fichier.txt
```

mais ca me retourne un erreur.
sed: 1: "1i\mon_texte \n ": extra characters after \ at the end of i command


----------



## Membre supprimé 1129907 (10 Juillet 2018)

sed fonctionne un peu différemment sur mac 

Pour ajouter une ligne "mon_texte" au début de ton fichier :

```
sed $'1i\
mon_texte\\\n' fichier.txt
```


----------



## symbol (11 Juillet 2018)

“Le meilleur ami de “merci” est “beaucoup”


----------



## symbol (11 Juillet 2018)

Ecatomb,

J'ai bien suivi tes conseils, mais ca coince ;-)

Le truc en dessous fonctionne pas vraiment.
Je ne retrouve pas le résultat dans le fichier PODIUM.txt, mais seulement dans le terminal.


```
head -3 /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt | tail -3   > /Users/xxx/Desktop/KENODATA/PODIUM.txt
sed $'1i\
LES 3 MEILLEURS PRONOTIQUEURS\\\n' /Users/xxx/Desktop/KENODATA/PODIUM.txt
```

Et si je met "> /Users/xxx/Desktop/KENODATA/PODIUM.txt" ou ">> /Users/xxx/Desktop/KENODATA/PODIUM.txt", c'est pire le terminal est figé.

MAJ : J'ai trouvé (c'est peut etre pas la meilleure solution (?)

```
> /Users/xxx/Desktop/KENODATA/PODIUM.txt
echo "LES 3 MEILLEURS PRONOTIQUEURS" >> /Users/xxx/Desktop/KENODATA/PODIUM.txt
head -3 /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt | tail -3   >> /Users/xxx/Desktop/KENODATA/PODIUM.txt
```


----------



## Membre supprimé 1129907 (11 Juillet 2018)

Ta dernière version est plutôt bien. Voici la même un peu mieux :

```
echo "LES 3 MEILLEURS PRONOTIQUEURS" > /Users/xxx/Desktop/KENODATA/PODIUM.txt
head -3 /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt >> /Users/xxx/Desktop/KENODATA/PODIUM.txt
```

Ou avec sed :

```
head -3 /Users/xxx/Desktop/KENODATA/RESULTATSTATS.txt > /Users/xxx/Desktop/KENODATA/PODIUM.txt
sed -i '' $'1i\
LES 3 MEILLEURS PRONOTIQUEURS\\\n' /Users/xxx/Desktop/KENODATA/PODIUM.txt
```

Vu ce que tu veux faire, utilise plutôt la première de ces deux versions. Plus simple à comprendre et modifier si besoin


----------



## symbol (12 Juillet 2018)

Qui fut dit, fut fait  Code rectifié.

Je voudrais ajouter l'heure locale a la commande


```
echo "${affichagedate} ${nickName} : X${multiplier} (${myMatches#,}) [$((${matchCount}-1))/${#myNumbersThisGame[*]}]▶ ${gamePayouts[${i}]} € X${multiplier} -------- ★★ $((${gamePayouts[${i}]}*${multiplier})) € ★★"  | tr '[[:lower:]]' '[[:upper:]]' | tr -d '@' > /Users/xxx/Desktop/KENODATA/RESULTATSHISTORIQUE.txt-tmp
```


Dois-je ajouter tel quel

```
date '+%T %r'
```
ou (je pense que c'est c'est la bonne réponse)

```
${date '+%T'}
```

Ce n'est pas indiqué dans les explications.

Merci


----------



## Membre supprimé 1129907 (12 Juillet 2018)

A toi de voir le format de date que tu veux. Par exemple :

```
date_actuelle=$(date "+%d-%m-%Y %H:%M")
echo "$date_actuelle"
```


----------



## symbol (12 Juillet 2018)

Ok merci

Ce que je comprends pas, "date_actuelle" c'est une variable.
pourquoi c'est pas indiqué comme pour les autres variables entre 2 { } ??

c'est echo "$date_actuelle"
alors que logiquement ca devrait etre    echo ${date_actuelle}


----------



## Membre supprimé 1129907 (12 Juillet 2018)

Il faut mieux mettre des {}
Ce n’est pas obligatoire mais recommandé pour éviter des problèmes comme dans le cas suivant :

```
variable="test"
echo "${variable}ok"
echo "$variableok"
```


----------



## symbol (13 Juillet 2018)

Bonjour 

Pour convertir un fichier de UTF8 en UTF16, est ce une commande qui ressemble a ca  "iconv -f utf-8 -t utf-16 file1.txt file2.txt" ?

Merci


----------



## Membre supprimé 1129907 (13 Juillet 2018)

On ne doit pouvoir donner qu'un seul fichier en paramètre, il faut donc faire comme ceci :

```
iconv -f 'UTF-8' -t 'UTF-16' "fichier_source" > "fichier_cible"
```


----------



## symbol (13 Juillet 2018)

Je demande ca, car pour afficher "€" dans mon forum (enfin dans certaines parties du forum) il faut que le texte soit en UTF16, sinon le symbole "€" a pas de forme.

Ps : Merci 

Est ce que le fichier source peut avoir le même nom que le fichier cible ?


----------



## Membre supprimé 1129907 (13 Juillet 2018)

Non, mais tu peux le renommer à la suite du iconv :

```
mv "fichier_cible" "fichier_source"
```


----------



## symbol (13 Juillet 2018)

Si j'ai bien compris.

fichier1 (source)     fichier2 (cible) ->   mv  ->  fichier2 (devient fichier1) et ecrase fichier1 ?


----------



## Membre supprimé 1129907 (13 Juillet 2018)

C'est ça, le mv renomme (ou déplace) le fichier donné en premier paramètre pour lui donner celui en deuxième paramètre.
S'il existe déjà, cela le remplace


----------

