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 :

Conversion b/s et kb/s en mb/s


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 135
    Points : 70
    Points
    70
    Par défaut Conversion b/s et kb/s en mb/s
    Bonjour,

    J'essaie de créer un petit script afin de convertir mes débits récupérés en mb/s

    Voici un exemple de mon fichier entrant :
    /tmp/aaa.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    0.00 b/s
    13.50 kb/s
    0.00 b/s
    8.26 kb/s
    0.00 b/s
    12.98 kb/s
    0.00 b/s
    0.00 b/s
    5.14 kb/s
    0.00 b/s
    0.00 b/s
    1.46 mb/s
    0.00 b/s
    2.83 mb/s
    J'ai essayé de passer par une boucle for pour traiter les chiffres et un case pour traiter les unités.

    Cependant cela ne fonctionne pas comme je le souhaiterai, pouvez-vous m'aider svp ?
    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
    data=$(cat /tmp/aaa.txt | awk '{print $1}')
     
    for element in $data
    do
            units=$(cat /tmp/aaa.txt | awk '{print $2}')
     
            case $units in
                    "b/s")
                            calcul=$(($element / 1024 / 1024))
                            echo "$calcul mb/s"
                            ;;
     
                    "kb/s")
                            calcul=$(($element / 1024))
                            echo "$calcul mb/s"
                            ;;
                    esac
    done

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Bonjour

    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
    $ awk 'BEGIN{suiv["b/s"]="kb/s";suiv["kb/s"]="mb/s";} {while ($2 != "mb/s") {$1 /= 1024.0; $2=suiv[$2];}; printf("%.3f %s\n",$1,$2); }' fichier.txt
    0.000 mb/s
    0.013 mb/s
    0.000 mb/s
    0.008 mb/s
    0.000 mb/s
    0.013 mb/s
    0.000 mb/s
    0.000 mb/s
    0.005 mb/s
    0.000 mb/s
    0.000 mb/s
    1.460 mb/s
    0.000 mb/s
    2.830 mb/s
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    une variante, toujours avec awk :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ cat fichier
    1048576.00 b/s
    1024.00 kb/s
    1.00 mb/s
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ awk '
    BEGIN {
       tab["b/s"] = 2
       tab["kb/s"] = 1
       tab["mb/s"] = 0
    }
     
    {
       printf("%.2f %s\t--->\t%.2f mb/s\n", $1, $2, $1/1024^tab[$2])
    }
    ' fichier
    et le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    1048576.00 b/s  --->    1.00 mb/s
    1024.00 kb/s    --->    1.00 mb/s
    1.00 mb/s       --->    1.00 mb/s

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Rappel : bash ne connaît que les nombres entiers. Donc pour des nombres à virgule, il faudra passer par bc, awk, ou autre subterfuge.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    bc, c'est bien.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 135
    Points : 70
    Points
    70
    Par défaut
    Merci pour toutes vos réponses !

    C'est peut-être pas le plus simple, mais voici comment j'ai procédé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    while read field1 field2; do
            case $field2 in
                   b/s)
                           echo "scale=3;$field1/1024/1024" | bc -l >> /tmp/resultat.txt
                           ;;
                   kb/s)
                           echo "scale=3;$field1/1024" | bc -l >> /tmp/resultat.txt
                           ;;
                   mb/s)
                           echo "$field1" >> /tmp/resultat.txt
                           ;;
                   esac
    done < /tmp/test.txt

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 287
    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 287
    Points : 12 744
    Points
    12 744
    Par défaut
    Si tu laisses tout en commentaire, ça ne fonctionnera pas...
    Cordialement.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    spoileur !
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 135
    Points : 70
    Points
    70
    Par défaut
    Ahah effectivement

    En tout cas merci pour toutes vos réponses !

  12. #12
    Membre éprouvé Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 346
    Points : 977
    Points
    977
    Par défaut
    Petite remarque : tu pourrais n'accéder qu'une fois à /tmp/resultat.txt en le sortant de la boucle while :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while read field1 field2; dodone </tmp/test.txt >/tmp/resultat.txt
    Si le fichier d'entrée grossit un peu, tu verras une différence au niveau du temps de traitement.
    Et puis ça évite d'utiliser >>, car je suppose que tu ne voulais pas que les résultats se concatènent à chaque appel du script (sinon, il faut bel et bien l'utiliser aussi dans la formulation ci-dessus).

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

Discussions similaires

  1. Conversion Assembleur Motorola 68xxx en Intel 80xxx
    Par markham dans le forum Autres architectures
    Réponses: 3
    Dernier message: 22/11/2002, 20h09
  2. [MSXML] Comment empécher la conversion des entités ?
    Par nima dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 08/11/2002, 14h14
  3. Algorithme de conversion de RTF vers HTML
    Par youtch dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 10/09/2002, 12h35
  4. [Conversions] Millisecondes...
    Par agh dans le forum Langage
    Réponses: 2
    Dernier message: 06/08/2002, 11h25
  5. Réponses: 2
    Dernier message: 05/06/2002, 12h29

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