Forum Programmation.shell Prog en bash...debutant

Posté par  .
Étiquettes : aucune
0
15
mai
2006
Bonjour,

Je suis en train de travailler sur un projet sous linux, certe pas fort compliqu� mais de part mon niveau debutant en bash et due au peu de connaissances que j ai en linux, je rencontre des difficultes.
Alors mon but est d effectuer un programme qui fera 100 fois le telechargement d un fichier depuis un serveur local (http://localhost/monfichier.tar.gz) une fois cette operation effectuee, j ai vu que la console affiche des informations et ce qui m interesse est la vitesse :

13:57:56 (7.15 MB/s) - `MEGASAVE.tar.gz.7' saved [942668/942668]

Dans ce cas je veux recuperer 7.15. Donc mon but est de recuperer les resultats de 100 telechargements dans un fichier text pour ensuite les traiter avec mathlab. J ai une vague impression qu il faut se servir de "grep, awk ou sed..." je ne sais rien de plus et je suis un vrai debutant...

Je vous remercie infiniment pour votre aide et je m excuse pour les accent, je travaille actuellement en espagne et le clavier n est pas adequate...

Vincent,

vincent_roye@hotmail.com
  • # re....

    Posté par  . Évalué à 2.

    Il faut filtrer la sortie de ton wget avec grep.

    En gros ça donnera:

    [binarym@trait-plat]:/tmp% wget http://www.google.fr 2>&1 |grep saved
    20:47:07 (7.85 MB/s) - `index.html' saved [2765]

    Un conseil, lis la page de manuel de grep, c'est très puissant comme outil :)
  • # une autre proposition

    Posté par  . Évalué à 2.

    bonsoir,

    Il faut que tu récupères les messages qui s'affiche sur la console (par un pipe ou dans un fichier, à voir en fonction de la façon dont tu télécharges).
    Puis il faut traiter les résultats. Si je me base sur des lignes toujours au format que tu as indiqué, je te propose la commande suivante :

    - dans un pipe :
    commande_téléchargement | sed 's,.*(\(.*\) MB.*,\1,g' >fichier_sauvegarde

    - dans un fichier :
    sed 's,.*(\(.*\) MB.*,\1,g' fichier_résultat_du_téléchargement >fichier_sauvegarde

    Pour plus de lisibilité, la virgule remplace / dans la commande sed.
    L'expression régulière en détail :
    1- ;*( capture tous les caractères avant la parenthèse ouvrante, y compris la parenthèse
    2- \(.*\) mémorise le motif (voir 4-)
    3- espaceMB.* capture tous les caractères après espaceMB, y compris ces caractères
    4- donc le 2- ne capture que ce qu'il y a entre 1- et 3-
    5- \1 rappelle ce motif mémorisé en 2- et remplace toute la ligne par ce motif

    J'espère que c'était clair et que ça t'aidera.


    Philippe
  • # en awk

    Posté par  . Évalué à 2.

    commande_téléchargement | awk -v RS="\(" ' NR%2 == 0 {print $1}'

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.