У меня есть файл, который выглядит так:
1
3
4
1
4
3
1
2
Как я могу найти общее количество этого (например, 1 + 3 + 4 + 1 + 4 + 3 + 1 + 2 = 19) ?
Вы также можете использовать awk. Чтобы подсчитать общее количество строк в файлах * .txt, содержащих слово «привет»:
grep -ch 'hello' *.txt | awk '{n += $1}; END{print n}'
Чтобы просто суммировать числа в файле:
awk '{n += $1}; END{print n}' file.txt
(Возможно, вам понадобится sudo apt-get install num-utils)
Команда numsum выполняет только то, что вам нужно по умолчанию;
$ numsum file.txt
19
Считывание тестовых номеров по строкам из stdin:
$ printf '
1
3
4
1
4
3
1
2' | numsum
19
Или чтение из одной строки:
$ printf '1 3 4 1 4 3 1 2' | numsum -r
19
В пакете содержатся некоторые другие утилиты для обработки номеров, которые заслуживают того, чтобы быть более известными:
numaverage - find the average of the numbers, or the mode or median
numbound - find minimum of maximum of all lines
numgrep - to find numbers matching ranges or sets
numinterval - roughly like the first derivative
numnormalize - normalize numbers to an interval, like 0-1
numrandom - random numbers from ranges or sets, eg odd.
numrange - similar to seq
numround - round numbers up, down or to nearest
и более общая команда калькулятора numprocess , , который применяет выражение из командной строки к номерам на строках ввода.
Вы можете использовать awk, собственное приложение linux, полезное для сканирования и обработки файлов с рисунком на строку. Для вашего вопроса это даст то, что вы хотите:
awk 'BEGIN { sum=0 } { sum+=$1 } END {print sum }' file.txt
Трубы также принимают:
cat file.txt | awk 'BEGIN { sum=0 } { sum+=$1 } END {print sum }'
Это довольно простое использование скриптов bash.
SUM=0; for line in `cat file.txt`; do SUM=$((SUM + line)); done
Решение для Perl:
$ perl -lnae '$c+=$_;END{print $c}' input.txt
19
Вышеуказанное может суммировать все числа в нескольких файлах:
$ perl -lnae '$c+=$_;END{print $c}' input.txt input2.txt
34
Для нескольких файлов, заданных в командной строке, где мы хотим видеть сумму чисел в отдельном файле мы можем это сделать:
$ perl -lnae '$c+=$_;if(eof){printf("%d %s\n",$c,$ARGV);$c=0}' input.txt input2.txt
19 input.txt
15 input2.txt
Простой -
awk '{total+=$1} END{print total}' file
добавляет числа и дает вам общее количество.