• [^] # Re: Dur

    Posté par (site web personnel) . En réponse au message Utiliser awk pour calculer la somme d'une ligne jusqu'à une autre.. Évalué à 4.

    Bon déjà il faut comprendre la syntaxe :

    pat1 , pat2 {code} : http://www.gnu.org/software/gawk/manual/gawk.html#Ranges

    pour chaque ligne il test si pat1 est vrai, si il est vrai alors il exécute le code à chaque ligne jusqu'à que pat2 soit vrai.

    Donc il faut que NR>=$fin pour qu'il commence à incrémenter la variable x, et il finira lorsque que NR==$debut. Ce qui veut dire si $début=2 et que $fin=4 alors la condition NR>=$fin sera vrai à partir de la ligne 4 mais par contre tu n'auras jamais NR==$debut (puisque NR sera toujours suppérieur à 4 et donc à 2). Et même si tu t'amuse à avoir un début plus grand que la fin, comme NR>=$fin sera vrai à la ligne suivante il va nécessairement traiter toutes les lignes jusqu'à la fin
    Donc ton code additionne tous ce qui est plus grand que $fin sans jamais s'arrêter.

    Maintenant lorsque tu mets $fin dans un awk il ne va pas chercher par magie la variable bash correspondante (c'est expliqué dans tous les tutos, même les plus petits) il va faire :
    - interprétation de la variable fin, je ne le trouve pas donc je le remplace par 0 ce qui donne 0ドル
    - interprétation de 0ドル c'est à dire toute la ligne

    Donc ton code correspond à :
    awk 'NR>=0,ドルNR==0ドル{x+=0ドル;}END{print x}'

    ce qui fonctionne encore moins et ne correspond pas du tout à ce que tu voulais faire.

    Si tu veux garder ta méthode tu dois plutôt faire :
    awk -v fin=$fin -v debut=$debut 'NR==debut,NR==fin {x+=0ドル} END {print x}'