redgepower a écrit 1 commentaire

  • [^] # Re: un essai

    Posté par  . En réponse au message aide avec awk. Évalué à 1.

    Ouf! Merci d'avoir eu la patience de me lire, car ta réponse m'a énormément aidé! En décorticant ce que tu proposais, j'ai pu comprendre pas mal de choses, notamment la notion de pipe! C'est vraiment astucieux! J'ai pourtant l'habitude de programmer mais je me suis fais un peu surprendre par la programmation shell. Celui qui la maitrise completement est le roi du pétrole!

    J'y ai presque repassé la journée, mais en m'inspirant de ta solution, j'ai réécrit le script en comprenant ce que je faisait. Pour ceux que ça interesse, voilà ma solution (mais je pense qu'il y en a bcp, plus performantes):

    #!/bin/sh
    i=1
    nbline=`cat ~/sacinfo.txt | wc -l`
    rm -f ~/sacinfo.new.txt
    echo "Tps ondes P" >> ~/tmp.txt
    while [ "$i" != "$nbline" ]
    do
    ((i+=1))
    ttp=`awk -F "\t" 'NR == '$i' {printf "P\n\n%s\n%s\n%d\n%d\n",$2,$12,-1,-1}' ~/sacinfo.txt | ttimes | awk 'NR == 37 {printf $4}'`
    echo "$ttp" >> ~/tmp.txt
    done
    paste ~/sacinfo.txt ~/tmp.txt > ~/sacinfo.new.txt
    rm -f ~/tmp.txt

    Explications:
    J'ai un compteur de ligne de mon fichier sacinfo.txt qui est "i". La boucle while parcourt toutes les lignes afin que le premier awk traite mon fichier ligne par ligne. Le printf formate les données avec des retours chariots pour les entrer dans ttimes. Le résultat de ttimes est renvoyé dans un awk qui va chercher le bon nombre en ligne 37 à la 4e position. Le tout est enregistré dans une variable ttp qui est redirigé ensuite dans un fichier: tmp.txt.
    A la fin de la boucle j'ai donc un fichier tmp.txt qui contient une colonne nommée "Tps ondes P" (fait au début du script). La commande paste colle directement cette colonne après les autres colonnes de mon fichier sacinfo.txt (je trouve ça vraiment très fort).

    Encore merci pour la réponse! C'est super puisque j'ai perdu deux jours, mais gagner peut etre 2 semaines et appris pas mal de choses :)