IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Récupération de la somme (des valeurs) d'une colonne d'un fichier


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 160
    Par défaut Récupération de la somme (des valeurs) d'une colonne d'un fichier
    Bonjour,
    Je cherche à faire la somme de la colonne 8 du fichier ftmp81.csv;
    et à utiliser cette valeur pour un calcul.
    Pour cela, comme les variables ne contiennent que des chaînes de caractères, il faut transformer cette chaîne de caractère en une valeur numérique.
    C'est cela que je n'arrive pas à faire : passer une valeur numérique à la variable variable1 qui sera utilisée comme diviseur.

    Aussi, je ne sais pas comment arrondir le résultat du calcul ((100 * $7) / variable1) à deux chiffres après la virgule.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    cut -f2,4-10,12,14,16,19,22,25,28 -d";" fedition.csv > ftmp81.csv
     
    f1 (){
    gawk -N -F ';' ' {SUM += $8} END {echo SUM}' ftmp81.csv
    }
    variable1=$f1
    echo "La valeur de la variable1 est :$variable1"
    #
    #Réorganisation des champs en sortie: 2  3  1  10  12  14  4  5  15  13  11  7  8  9  6
    gawk -N -F ';'  -v var1=1.00 '
    {
    	# var1=((100 * $7) / variable1)
    	var1=((100 * $7) / 141964)
    	print $2";"$3";"$1";"$10";"$12";"$14";"$4";"$5";"$15";"$13";"$11";"$7";"$8";"$9";"$6";"var1
    } ' ftmp81.csv > ftmp82.csv
    Résultat (début):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Liamm@HAL42:~/projets/Eb_Shell_21$ ./p8.sh
    La valeur de la variable1 est :f1
     
     
    2021-03-11 16:08 Oui, Jérome c'est moi, je n'ai pas changé, je suis toujours celui que tu as aimé .   .   .   . Tri valeur croissante .   .   .   .   Page 1
     
     
    Date_rel Qte__    Valeur_______________      Pu_mini  Der_ach  Pu_o_ac  Pu_____  Px_moy   Pu_o_ve  Der_ven  Pu_maxi  Valoris  Somme_i  Perfo    P_va     P_si
     
    20210305 260      2CRSI****************      1,86     4,82              5,920    6,339             #N/D     10,25    1539,2   1648,14  -6,60988 0,85     1,08422
     
    20210305 383      ADEUNIS RF***********      1,85     4,7               2,590    6,835             #N/D     7,269    991,97   2617,8   -62,1068 0,55     0,698748

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 335
    Par défaut
    gawk ne connait pas echo mais print... (fonction f1)

    en awk (pas testé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -vvariable1="$variable1" '{var=sprintf("%.2f",(100 * $7) / variable1);print var}'

  3. #3
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 160
    Par défaut Re
    Ça ne marche pas bien;
    Ce que j'essaye de faire est plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gawk -N -F ';' ' {SUM += $8} END {print SUM}' ftmp81.csv
    cette ligne de code marche : elle m'imprime à l'écran la somme des valeurs de la 7ième colonne de mon fichier en entrée ftmp81.csv.

    La valeur imprimée est une chaîne de caractère par exemple : 17542

    La question est comment peut-on utiliser dans le awk (ou gawk) suivant, la valeur numérique 17542 pour y faire le calcul suivant pour chaque ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var1=((100 * $7) / 17542)

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 635
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    Par défaut
    La valeur imprimée est une chaîne de caractère par exemple : 17542
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ awk 'BEGIN{v="17542"; print v+1}' #17542 est un texte, puisqu'il est entre guillemets
    17543
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ awk 'BEGIN{v=17542; print v+1}' #17542 est un nombre, puisqu'il n'est pas entre guillemets
    17543
    ça ne change rien.

    ou alors, il y a autre chose dans le champ, et tu dois nous le montrer.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 160
    Par défaut Re
    N'y arrivant toujours pas voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    #!/bin/bash                   
     
    #####   Script : p8.sh   sans paramètre                           #####
    # Autheur :              Liamm
    # Date de creation :     09 Mars 2021
    # Date de modification : 12 Mars 2021
    #
    #=======================================================================
    # Edition 05 écran pour :    
    #                         Décisions
    #                         Manque en % pour acheter ou vendre
    #=======================================================================
    #ENTREE                                   SORTIE
    #  Fichier editions entree                Fichier ecran sortie
    #   1 Code_isin                           (1)                    
    #   2 Valeur                                4                          1
    #   3 Type de compte : C_P   
    #   4 Date du relevé aaaammjj             2                            2
    #   5 Quantité                             3                           3
    #   6 Cours                                      8                     4
    #   7 Prix_moyen                                  9                    5
    #   8 Poids % par compte                                        16     6
    #-----------------------------------------------------------------------
    #   9 Valorisation    =4*5                                13           7
    #  10 Somme_investie  =4*6                                  14         8
    #  11 +/- value       =4*5-4*6
    #  12 Performance (%) =100* (5/6 -1)                          15       9
    #-----------------------------------------------------------------------
    #  13 Date_mini_2019_2021_pea 
    #  14 Mini_2019_2021_pea                      5                       10
    #  15 Date_maxi_2019_2021_pea 
    #  16 Maxi_2019_2021_pea                                12            11
    #-----------------------------------------------------------------------
    #  17 Date_dernier_achat   
    #  18 Qte_dernier_achat 
    #  19 Pu_ht_dernier_achat                      6                      12
    #  20 Date_derniere_vente  
    #  21 Qte_dernier_achat
    #  22 Pu_ht_derniere_vente                            11              13
    #-----------------------------------------------------------------------
    #     Valeur (pour la phase de test)
    #  23 Date_val_oa   
    #  24 Qte_oa        
    #  25 Pu_oa                                     7                     14                     
    #  26 Date_val_ov   
    #  27 Qte_ov        
    #  28 Pu_ov                                         10                15
    #-----------------------------------------------------------------------
    #  29 flag F1 mini  = a   Maxi  = b       
    #  30 flag F2 Perf- = c   Perf+ = d
    #----------------------------------------------------------------------#
    # via calul . . . . . . . . . . Poids somme Investie              17
    #----------------------------------------------------------------------#
    # Edition 04 pea tri : % manquant pour achat ou vente                  #
    #----------------------------------------------------------------------#
    #
    cut -f2,4-10,12,14,16,19,22,25,28 -d";" fedition.csv > ftmp81.csv
     
    #solution à tester: awk -v variable1="$variable1" ' {var=sprintf("%.2f",(100 * $7) / variable1);print var}' ftmp81.csv
     
    variable1=1.0
    echo "1)La valeur de la variable1 est :$variable1"
    #gawk -N -F ';' -v variable1="$variable1" ' {SUM += $8} END {variable1=sprintf("%.2f", SUM)}' ftmp81.csv
     
    #sol awk -v variable1="$variable1" ' {var=sprintf("%.2f",(100 * $7) / variable1);print var}' ftmp81.csv
     
    #gawk -N -F ';' -v variable1=2.0 ' {SUM += $8} END {variable1=sprintf("%2.f", SUM) }' ftmp81.csv
    gawk -N -F ';' -v variable1=0.0 ' {variable1 += $8} END {print variable1 }' ftmp81.csv
    #gawk -N -F ';' ' {SUM += $8} END {variable1=$(( sprintf("%2.f", SUM;print variable1 ))}' ftmp81.csv
    echo "3)La valeur de la variable1 est :$variable1"
    #
    #Réorganisation des champs en sortie: 2  3  1  10  12  14  4  5  15  13  11  7  8  9  6
    gawk -N -F ';'  -v var1=1.00 '
    {
    	var1=((100 * $7) / $variable1)
    	print $2";"$3";"$1";"$10";"$12";"$14";"$4";"$5";"$15";"$13";"$11";"$7";"$8";"$9";"$6";"var1
    } ' ftmp81.csv > ftmp82.csv
     
     
    sort ftmp82.csv -t";" -k3 > ftmp83.csv
     
    cat f8titre.csv ftmp83.csv > ftmp84.csv
    pr -d -h "Oui, Jérome, c' est moi, non je n' ai pas changé \
    Je suis toujours celui qui t' a aimé aimé .   .   .   . \
    Tri valeur croissante .   .\
       .   .  " -l 164 -e";"9 -c ftmp84.csv
    #
    #======================================================================#
    Voici l'exécution : (aucune ligne ne sort)
    l
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    iamm@HAL42:~/projets/Eb_Shell_21$ ./p8.sh
    1)La valeur de la variable1 est :1.0
    147964
    3)La valeur de la variable1 est :1.0
    gawk: ligne de commande:3: (FILENAME=ftmp81.csv FNR=1) fatal*: tentative de division par zéro
     
     
    2021-03-12 16:25 Oui, Jérome, c' est moi, non je n' ai pas changé Je suis toujours celui qui t' a aimé aimé .   .   .   . Tri valeur croissante .   .   .   .   Page 1
     
     
    Date_rel Qte__    Valeur_______________      Pu_mini  Der_ach  Pu_o_ac  Pu_____  Px_moy   Pu_o_ve  Der_ven  Pu_maxi  Valoris  Somme_i  Perfo    P_va     P_si
    Et le début du fichier ftmp81.csv
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    liamm@HAL42:~/projets/Eb_Shell_21$ cat ftmp81.csv -n
         1	NOKIA****************;20210305;625;3,220;3,338;1,11;2012,5;2086,25;-3,53505;2,275;5,762;2,909;#N/D;2,58;6,7
         2	Lbpam Isr Actions Eur;20210305;0,47473;213,420;211,236;0,06;101,317;100,28;1,03391;209,09;214,86;;;;
         3 ...

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 635
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ awk -v v=0.0 -F ';' '{v+=$8}END{print v}' /tmp/liamm.csv
    2186
    /tmp/liamm.csv contient les deux premières lignes du fichier donné en exemple.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 160
    Par défaut Re
    Oui, mais après ? pour le deuxième gawk !

  8. #8
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 635
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    Par défaut
    pfff.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tentative de division par zéro
    à quel moment variable1 est-elle défini dans awk ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 160
    Par défaut Re
    Ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gawk -N -F ';' -v variable1=0.0 ' {variable1 += $8} END {print variable1 }' ftmp81.csv

  10. #10
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 635
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    Par défaut
    et pour la division ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 160
    Par défaut Re
    Ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var1=((100 * $7) / $variable1)

  12. #12
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 335
    Par défaut
    Et est-ce que tu vois la différence entre tes 2 commandes gawk concernant variable1 ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gawk -N -F ';' -v variable1=0.0 ' {variable1 += $8} END {print variable1 }' ftmp81.csv
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    gawk -N -F ';'  -v var1=1.00 '
    {
    	var1=((100 * $7) / $variable1)
    	print $2";"$3";"$1";"$10";"$12";"$14";"$4";"$5";"$15";"$13";"$11";"$7";"$8";"$9";"$6";"var1
    } ' ftmp81.csv > ftmp82.csv

  13. #13
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 160
    Par défaut Re
    Oui :
    La première commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gawk -N -F ';' -v variable1=0.0 ' {variable1 += $8} END {print variable1 }' ftmp81.csv
    sert à lire le fichier en entrée en sommant le huitième champ.
    Là ce serait bien de stocker cette somme dans une variable (variable1) pour s'en servir dans le second awk.


    La seconde commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    gawk -N -F ';'  -v var1=1.00 '
    {
    	var1=((100 * $7) / $variable1)
    	print $2";"$3";"$1";"$10";"$12";"$14";"$4";"$5";"$15";"$13";"$11";"$7";"$8";"$9";"$6";"var1
    } ' ftmp81.csv > ftmp82.csv
    relit le même fichier pour calculer pour chaque ligne un pourcentage qui sera ajouté en dernière colonne avec var1

  14. #14
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 335
    Par défaut
    Ok, on met la valeur dans la variable shell "variable1" le resultat du premier awk:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    variable1=$(gawk -N -F ';' -v variable1=0.0 ' {variable1 += $8} END {print variable1 }' ftmp81.csv)
    Et le 2éme awk, il faut le corriger (pas testé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    gawk -N -F ';'  -v variable1="$variable1"  '
    {
    	var1=sprintf("%.2f",((100 * $7) / variable1))
    	print $2";"$3";"$1";"$10";"$12";"$14";"$4";"$5";"$15";"$13";"$11";"$7";"$8";"$9";"$6";"var1
    } ' ftmp81.csv > ftmp82.csv
    PS: Rassure-moi, tu n'es pas enseignant en développement ?

  15. #15
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 160
    Par défaut Re
    Merci infiniment disedorgue.

    Tout marche très bien avec ton code !

    Je n'enseigne pas à développer, mais seulement la politesse, les mathématiques et les sciences physiques.
    Mais, j'ai aussi développé sur gros systèmes, style IBM ES9000 CICS DB2 . . .
    J'accorde beaucoup d'importance à la méthodologie.
    Les normes (non contraignantes)
    J'ai pratiqué aussi avec Python3; mais depuis que je me suis rendu compte que je pouvais faire la même chose avec le Shell, je m'intéresse de plus en plus au Shell.
    Mais sans véritablement de documentations sur le sujet; et ce qui me manque le plus : c'est d'avoir des personnes avec qui échanger directement pour pouvoir vraiment progresser !

    Encore un grand merci.

  16. #16
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 335
    Par défaut
    ça tombe bien, sur ce forum, il y a plein de gens avec qui échanger tant que l'on ne demande pas de faire le travail à sa place

    En tout cas, j'espère que tu as compris les 2 correctifs.

  17. #17
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 345
    Par défaut
    Bonjour,
    Liamm
    La première commande :
    awk ...
    sert à lire le fichier en entrée en sommant le huitième champ.
    Là ce serait bien de stocker cette somme dans une variable (variable1) pour s'en servir dans le second awk.
    La seconde commande :
    awk ...
    relit le même fichier pour calculer pour chaque ligne un pourcentage qui sera ajouté en dernière colonne avec var1
    J'ai pas tout lu en détail.
    fichier d'entrée et résultat attendu semble manquant, mais je pense qu'un seul awk devrait suffire.
    Cordialement.

  18. #18
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 335
    Par défaut
    oui, un seul awk est possible, si tu as une solution, on est preneur

  19. #19
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 345
    Par défaut
    Bonjour,
    Citation Envoyé par disedorgue Voir le message
    oui, un seul awk est possible, si tu as une solution, on est preneur
    J'imagine bien que tu saurais faire et que ça intéresse plutôt Liamm
    On peut lire 2 fois le fichier d'entrée avec un seul awk.
    La première lecture (FN=FNR) calcule la somme de la colonne 8.
    La seconde lecture calcule le pourcentage et affiche le résultat attendu.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    gawk -N -F ';' '
    NR==FNR {
      SUM += $8
      next
    }
    {
      print sprintf($2 FS $3 FS $1 FS $10 FS $12 FS $14 FS $4 FS $5 FS $15 FS $13 FS $11 FS $7 FS $8 FS $9 FS $6) \
      FS sprintf("%.2f",((100*$7/SUM)))
    }' ftmp81.csv ftmp81.csv
    Si le fichier d'entrée n'est pas trop volumineux, on peut le lire 1 seule fois et afficher le résultat attendu dans le END.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    gawk -N -F ';' '
    {
    SUM += $8
    }
    {
      a[++i]=sprintf($2 FS $3 FS $1 FS $10 FS $12 FS $14 FS $4 FS \
      $5 FS $15 FS $13 FS $11 FS $7 FS $8 FS $9 FS $6) ; b[i]=$7
    }
    END {
    for (j=1;j<=i;j++)
      {
        print a[j] FS sprintf("%.2f",((100*b[j]/SUM)))
      }
    }' ftmp81.csv
    Cordialement.

  20. #20
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 283
    Par défaut
    Bonjour

    Suis-je le seul à être inquiet par le fait de traiter des nombres à virgule avec une virgule, alors que awk traite des nombres à virgules avec un point ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ awk '{total += $1} END{print total;}' <<eof
    > 7,2
    > 7,5
    > 2
    > eof
    16
    $ awk '{total += $1} END{print total;}' <<eof
    7.2
    7.5
    2
    eof
     
    16.7
    0.7 ne serait-il pas parti dans la nature ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/03/2019, 17h19
  2. Réponses: 5
    Dernier message: 29/03/2019, 10h08
  3. Réponses: 4
    Dernier message: 29/06/2016, 11h34
  4. [XL-2003] Fusion + Somme des valeurs d'une colonne
    Par arkhang dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 19/06/2014, 16h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo