Столбцы суммы в оболочке Linux - PullRequest
2 голосов
/ 24 мая 2010

Как можно суммировать (используя оболочку Linux) числа в столбце? Если возможно, я не хочу использовать мощные инструменты, такие как awk или perl. Я хочу что-то вроде giveMeNumber | sum

Ответы [ 5 ]

4 голосов
/ 24 мая 2010

Поскольку вы не предоставили пример файла, я покажу простой (1-й столбец) подход с использованием калькулятора Unix bc и преобразования строк в «+» с помощью команды tr - вам нужно дополнительно 0 в конец с новой строки после последнего номера создаст дополнительный «+» в самом конце:

$ cat a
1
2
3
$ cat a | tr "\012" "+" ; echo "0"
1+2+3+0
$ (cat a | tr "\012" "+" ; echo "0") |bc
6

Однако я не совсем уверен, почему вам нужно избегать Perl, так как это очень легко сделать в виде одной строки:

> perl5.8 -ae '{map {$sum+=$_} <>; print "$sum\n"}' a
6
3 голосов
/ 24 мая 2010
giveMeNumber | (tr '\n' '+'; echo 0) | bc

Предполагая, что giveMeNumber генерирует одно число на строку в первом столбце, используйте cut, чтобы извлечь соответствующий столбец в противном случае. Команда tr заменит любой символ новой строки знаком плюс:

1
2
3

становится

1 + 2 + 3 +

echo 0 в конце необходим для предотвращения ошибки синтаксического анализа от финального + в конце. Все это подается на bc, который видит арифметическое выражение, которое эффективно суммирует числа и печатает результат:

$ seq 10|(tr '\n' '+'; echo 0)|bc
55
2 голосов
/ 24 мая 2010

Почему вы хотите избежать awk? Это довольно просто сделать, и вы можете легко изменить столбец для суммирования, изменив $1 на $2, $3 и т. Д.

$ seq 10
1
2
3
4
5
6
7
8
9
10
$ seq 10 | awk '{sum += $1} END{print sum}'
55
1 голос
/ 24 мая 2010

Хорошо - если вы используете bash (что, вероятно, является наиболее распространенной оболочкой, используемой в Linux, но на самом деле не существует ни одной "оболочки Linux" :-), вы можете сделать что-то вроде следующего:

#!/bin/bash
a=0
while read n; do
  a=$[a+n]
done
echo $a

Это будет ваша sum программа - хотя, вероятно, неплохо бы назвать ее как-то иначе, поскольку sum - это стандартная утилита для вычисления контрольных сумм.

0 голосов
/ 21 декабря 2014

Вы можете сделать это с помощью Alacon - утилиты командной строки для Alasql базы данных.Он работает с Node.js, поэтому вам нужно установить Node.js , а затем Alasql package:

Для вычисления суммы из stdin вы можете использовать следующую команду:

> cat data.txt | node alacon "SELECT VALUE SUM([0]) FROM TXT()" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...