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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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.

+ Répondre à la discussion
Cette discussion est résolue.

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