Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[shell] additions

11 réponses
Avatar
Frédéric Boiteux
Bonjour,

Je cherche le moyen simple dans une commande shell (bash)
d'additionner des nombres lus sur l'entr=C3=A9e standard, par exemple la
sortie de la commande ls -l | awk '{print $5}'. Auriez-vous une id=C3=A9e ?

Fred.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-french-REQUEST@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmaster@lists.debian.org
Archive: http://lists.debian.org/20101203160523.2e6cbc21@prem6s

10 réponses

1 2
Avatar
Sylvain L. Sauvage
Le vendredi 3 décembre 2010 à 16:05:23, Frédéric Boiteu x a écrit
:
Bonjour,



’jour,

Je cherche le moyen simple dans une commande shell (bash)
d'additionner des nombres lus sur l'entrée standard, par
exemple la sortie de la commande ls -l | awk '{print $5}'.
Auriez-vous une idée ?



awk 'BEGIN {s = 0} {s += $5} END {print s}'

--
Sylvain Sauvage

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
Frédéric Boiteux
Le Fri, 3 Dec 2010 16:23:37 +0100,
"Sylvain L. Sauvage" a écrit :

awk 'BEGIN {s = 0} {s += $5} END {print s}'



Ah, oui, mais awk, c'est de la triche ;-P

Merci,
Fred.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
Sylvain L. Sauvage
Le vendredi 3 décembre 2010 à 16:29:06, Frédéric Boiteu x a écrit
:
> awk 'BEGIN {s = 0} {s += $5} END {print s}'

Ah, oui, mais awk, c'est de la triche ;-P



Tu l’utilisais déjà dans ton exemple :oP

Sinon, tu as
… | { s=0; while read i; s=$[ $s + $i ]; done; echo $s; }

Mais $[] ne connaît que les entiers.

Franchement, regrouper tous les 'grep | cut | awk' dans un
seul 'awk' (ou perl, ruby…) me paraît souvent plus propre et
plus clair (euh, ok, pas forcément avec perl…). Quand un outil
est dépassé, autant le remplacer que d’enfiler les tubes (et
donc les processus) avec des commandes sous-utilisées.

--
Sylvain Sauvage

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
Yves Rutschle
On Fri, Dec 03, 2010 at 04:29:06PM +0100, Frédéric Boiteux wrote:
Le Fri, 3 Dec 2010 16:23:37 +0100,
"Sylvain L. Sauvage" a écrit :

> awk 'BEGIN {s = 0} {s += $5} END {print s}'

Ah, oui, mais awk, c'est de la triche ;-P



Et Perl?

ls -l | awk '{print $5}' | perl -nle '$c += $_; END{print $c;}'

Ton cahier des charges n'est pas complet, qu'est-ce qui
n'est pas de la triche?

On peut faire ça aussi:
ls -l | awk '{print $5}' | while read n; do c=$(( c + n )); echo $c; done | tail -n 1

(on devrait pouvoir faire mieux, en imprimant $c après la
boucle et sans le tail, mais je n'arrive pas à "sortir" $c
de la boucle, et je comprend pas pourquoi pour le moment).


Y.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
Sylvain L. Sauvage
Le vendredi 3 décembre 2010 à 16:45:46, Yves Rutschle a écri t :
On Fri, Dec 03, 2010 at 04:29:06PM +0100, Frédéric Boiteux


wrote:
[…]
On peut faire ça aussi:
ls -l | awk '{print $5}' | while read n; do c=$(( c + n ));
echo $c; done | tail -n 1

(on devrait pouvoir faire mieux, en imprimant $c après la
boucle et sans le tail, mais je n'arrive pas à "sortir" $c
de la boucle, et je comprend pas pourquoi pour le moment).



Parce que ton c n’est pas connu en dehors de la boucle.
D’où, en plus de bien initialiser c, mon
c=0; <boucle>; echo $c;
et l’enrobage dans une liste { … }.

--
Sylvain Sauvage

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
Jean-Yves F. Barbier
On Fri, 3 Dec 2010 16:05:23 +0100, Frédéric Boiteux istel.com>
wrote:

Je cherche le moyen simple dans une commande shell (bash)
d'additionner des nombres lus sur l'entrée standard, par exemple la
sortie de la commande ls -l | awk '{print $5}'. Auriez-vous une idée ?



pour ce cas particulier: du -s /mondirquejeveuxsataillealui

--

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
Yves Rutschle
On Fri, Dec 03, 2010 at 05:17:40PM +0100, Sylvain L. Sauvage wrote:
Parce que ton c n'est pas connu en dehors de la boucle.
D'où, en plus de bien initialiser c, mon
c=0; <boucle>; echo $c;
et l'enrobage dans une liste { ... }.



Je me doutais d'un truc de ce genre là, j'avais bein essayer
de "déclarer" c avec "variable c" mais je pense que je
confond avec javascript. Comme quoi, ne pas pratiquer un
language régulièrement, ça rouille.

Merci!
Y.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
Erwan David
On Fri, Dec 03, 2010 at 04:05:23PM CET, Frédéric Boiteux said:
Bonjour,

Je cherche le moyen simple dans une commande shell (bash)
d'additionner des nombres lus sur l'entrée standard, par exemple la
sortie de la commande ls -l | awk '{print $5}'. Auriez-vous une idée ?

Fred.



result = 0
while read next;do
result=$(( $result + $next ))
done

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
Sylvain L. Sauvage
Le vendredi 3 décembre 2010 à 17:20:42, Yves Rutschle a écri t :
On Fri, Dec 03, 2010 at 05:17:40PM +0100, Sylvain L. Sauvage


wrote:
> Parce que ton c n'est pas connu en dehors de la boucle.
> D'où, en plus de bien initialiser c, mon
>
> c=0; <boucle>; echo $c;
>
> et l'enrobage dans une liste { ... }.

Je me doutais d'un truc de ce genre là, j'avais bein essayer
de "déclarer" c avec "variable c" mais je pense que je
confond avec javascript. Comme quoi, ne pas pratiquer un
language régulièrement, ça rouille.



Plutôt declare ou local (dans une fonction pour ce dernier)

Merci!



Heu, en fait, m’avions gouru : l’initialisation ne sert pas ,
c’est la liste qui fait tout (terme du man : « commandes
groupées »). M’enfin initialiser, ça fait pas de ma l…

Les accolades ont donc l’avantage, en plus de ne pas créer de
sous-processus, d’encapsuler les variables locales.

Au passage, tu as raison d’utiliser $(( )), dash ne connaît pa s
$[].

--
Sylvain Sauvage

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
Frédéric Boiteux
Le Fri, 3 Dec 2010 17:07:45 +0100,
"Sylvain L. Sauvage" a écrit :

Le vendredi 3 décembre 2010 à 16:29:06, Frédéric Boit eux a écrit
:
> > awk 'BEGIN {s = 0} {s += $5} END {print s}'
>
> Ah, oui, mais awk, c'est de la triche ;-P

Tu l’utilisais déjà dans ton exemple :oP

Sinon, tu as
… | { s=0; while read i; s=$[ $s + $i ]; done; echo $s; }

Mais $[] ne connaît que les entiers.

Franchement, regrouper tous les 'grep | cut | awk' dans un
seul 'awk' (ou perl, ruby…) me paraît souvent plus propre et
plus clair (euh, ok, pas forcément avec perl…). Quand un out il
est dépassé, autant le remplacer que d’enfiler les tube s (et
donc les processus) avec des commandes sous-utilisées.




Merci à tous pour vos réponses.

J'avais pour ma part cherché du coté de « bc  » ou autres outils
mathématiques, sans trop penser à awk ou perl… Mon exempl e n'est sans
doute pas le mieux trouvé car on peut effectivement calculer l'info par
ailleurs, mais ce n'était pas la première fois que je tombais sur le
cas d'une liste de nombres à additionner depuis un pipe shell, et je
pensais vraiment qu'il devait y avoir un petit outil Unix pour cela.

Bonne semaine,
Fred.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
1 2