$ time { nums=$(<file.txt); for i in ${nums[@]}; do (( sum+=i )); done; echo $sum ;}
19
real 0m0.002s
user 0m0.000s
sys 0m0.000s
$ time { while read i; do (( sum+=i )); done <file.txt; echo $sum ;}
19
real 0m0.000s
user 0m0.000s
sys 0m0.000s
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
bc
在一些帮助下,paste
将行放在一个单独的行中,并+
作为分隔符:要使用
grep
(或任何其他命令)的输出而不是静态文件,请将grep
的 STDOUT 传递给 的 STDINpaste
:例子:
如果您必须使用
bash
,那么您可以使用数组来保存文件内容,然后遍历元素,或者您可以逐行读取文件并对每一行进行求和,第二种方法会更有效:你也可以使用 awk。要计算*.txt文件中包含单词“hello”的总行数:
简单地将文件中的数字相加:
numsum
从包装中使用num-utils
!(您可能需要
sudo apt-get install num-utils
)该命令
numsum
默认执行您需要的操作;逐行读取测试编号
stdin
:或从一行读取:
更多实用程序
该软件包包含一些其他值得更广为人知的用于数字处理的实用程序:
还有一个更通用的计算器命令
numprocess
,它将命令行中的表达式应用于输入行上的数字。
您可以使用
awk
一个原生 linux 应用程序,用于扫描和处理每行模式的文件。对于您的问题,这将产生您想要的:管道也接受:
Perl 解决方案:
以上可以将多个文件中的所有数字相加:
对于在命令行上给出的多个文件,我们希望查看单个文件中的数字总和,我们可以这样做:
一种简单的方法是使用 shell 的内置功能:
这会逐行读取您的文件,总结并打印结果。
如果你想使用管道并且只使用第一行,它的工作方式如下:
获取第一个元素是这样完成的:
这是
bash
脚本的一个相当简单的使用。