Comment puis-je additionner (en utilisant un shell Linux) des nombres dans une colonne? Si possible, je ne veux pas utiliser d'outils puissants comme awk ou perl. Je veux quelque chose comme giveMeNumber | sum
Colonnes de somme de shell Linux
Répondre
Puisque vous n'avez pas fourni l'échantillon de fichier, je vais montrer l'approche simple (1ère colonne), en utilisant la calculatrice de Unix bc
et transformer les nouvelles lignes en « + » en utilisant la commande tr
- vous avez besoin d'un 0 supplémentaire à la fin depuis le saut de ligne après le dernier numéro créera un supplément « + » à la fin:
$ cat a
1
2
3
$ cat a | tr "\012" "+" ; echo "0"
1+2+3+0
$ (cat a | tr "\012" "+" ; echo "0") |bc
6
Cependant, je ne suis pas tout à fait sûr pourquoi vous devez éviter Perl, car il est très facile à faire en une ligne:
> perl5.8 -ae '{map {$sum+=$_} <>; print "$sum\n"}' a
6
http://www.pixelbeat.org/scripts/add – pixelbeat
bien - si vous utilisez bash
(ce qui est probablement le shell le plus couramment utilisé sur Linux, mais il n'y a pas vraiment un « shell Linux » :-) vous pouvez faire quelque chose comme ce qui suit:
#!/bin/bash
a=0
while read n; do
a=$[a+n]
done
echo $a
Ce serait votre programme sum
- bien que ce soit probablement une bonne idée de l'appeler autrement puisque sum
est un utilitaire standard pour calculer les sommes de contrôle.
La méthode que vous montrez fonctionnera dans les shells POSIX en plus de Bash. La construction '$ [...]' est obsolète, utilisez '$ ((...))' à la place. Ou, dans Bash, faites '((a + = n))'. –
Pourquoi voulez-vous éviter awk? Il est assez simple à faire, et vous pouvez facilement changer la colonne à somme en changeant $1
à $2
, $3
, etc.
$ seq 10
1
2
3
4
5
6
7
8
9
10
$ seq 10 | awk '{sum += $1} END{print sum}'
55
giveMeNumber | (tr '\n' '+'; echo 0) | bc
En supposant que giveMeNumber
génère un numéro par ligne dans la première colonne, utilisez cut
extraire la colonne appropriée autrement. La commande tr
remplacera jamais le caractère de nouvelle ligne avec un signe plus:
1
2
3
devient
1 + 2 + 3 +
le echo 0
à la fin est nécessaire pour éviter une analyse syntaxique erreur du final + à la fin. Tout cela est alimenté à bc
qui voit une expression arithmétique qui résume bien les chiffres et imprime le résultat:
$ seq 10|(tr '\n' '+'; echo 0)|bc
55
Vous pouvez le faire avec Alacon - utilitaire de ligne de commande pour la base de données Alasql. Il fonctionne avec Node.js, vous devez installer Node.js puis Alasql package:
Pour calculer la somme de StdIn vous pouvez utiliser la commande suivante:
> cat data.txt | node alacon "SELECT VALUE SUM([0]) FROM TXT()"
- 1. script shell + numéros somme
- 2. Taille de fichier shell Linux
- 3. date de shell linux question
- 4. Nhibernate: restriction somme de 2 colonnes
- 5. faire une somme combinée de deux colonnes
- 6. Linux shell situation étrange
- 7. Livre sur la programmation de shell Linux
- 8. Aide sur l'implémentation simple de shell Linux
- 9. ligne d'entrée de script shell linux
- 10. Pourquoi somme (X, 1) la somme des colonnes dans MATLAB?
- 11. Sélection de max d'une somme de deux colonnes
- 12. Linux shell équivalent sur IIS
- 13. Linux: shell builtin string correspondant
- 14. sortie shell linux à html
- 15. Regroupement de plusieurs colonnes avec agrégation et somme sql sever
- 16. Comment faire la somme des colonnes de la liste 2D?
- 17. Dernière ligne de DataGridView figée comme somme des colonnes?
- 18. Prolog - somme de toutes les lignes et colonnes
- 19. Obtenez somme de deux colonnes dans une requête LINQ
- 20. Somme la différence de deux colonnes dans Entity Framework
- 21. T-SQL select somme de deux colonnes entier
- 22. __LINE__ équivalent pour le shell Linux
- 23. sommation cellulaire des tables dans sage un script shell linux
- 24. shell Linux: Comment lire l'argument de la commande d'un fichier?
- 25. Comment lancer un shell linux à partir de/etc/inittab
- 26. Somme des colonnes avec des valeurs nulles dans Oracle
- 27. Obtenez SOMME des ventes pour plusieurs années dans les colonnes
- 28. données de somme sql de plusieurs tables
- 29. ajouter une valeur de colonne supplémentaire à une somme de colonnes
- 30. Oracle SQLPlus: format de soulignement lors de la somme sur plusieurs colonnes
« Comment puis-je obtenir un clou dans un morceau de bois? Je ne veux pas utiliser un marteau. " Pourquoi diable voudriez-vous éviter les outils qui sont parfaits pour le travail? –
Possible dupe: http://stackoverflow.com/questions/2702564/how-can-i-quickly-sum-all-numbers-in-a-file/2702614#2702614 –
@William: Ne tuez pas une puce avec un marteau-piqueur – yassin