Shell命令来整数整数,每行一个?

我正在寻找一个命令,它将接受多行文本作为输入,每行包含一个整数,并输出这些整数的总和。

作为一个背景,我有一个日志文件,其中包括时间测量,所以通过对相关行进行grep,以及一些sed格式化,我可以列出该文件中的所有时间。 然而,我想要计算出总数,而我的想法却一片空白,我可以用这个中间输出来执行最后的总和。 过去我一直使用expr ,但除非它运行在RPN mode ,否则我不认为它会应付这种情况(即使这样也会很棘手)。

我错过了什么? 考虑到可能有几种方法可以实现这一目标,即使其他人已经发布了可以完成这项工作的不同解决方案,我也会很乐意阅读(并upvote )任何可行的方法。

相关问题:最短命令来计算在Unix上的一列输出的总和? (学分@安德鲁)


更新 :哇,正如所料,这里有一些很好的答案。 看起来,我一定会作为一般的command-line tool来深入检查awk


awk位应该这样做?

awk '{s+=$1} END {print s}' mydatafile

注意:如果您要添加超过2 ^ 31(2147483647)的任何内容,awk的某些版本会有一些奇怪的行为。 查看更多背景的评论。 一个建议是使用printf而不是print

awk '{s+=$1} END {printf "%.0f", s}' mydatafile

粘贴通常会合并多个文件的行,但也可用于将文件的各行转换为单行。 分隔符标志允许你传递一个x + x类型的公式给bc。

paste -s -d+ infile | bc

或者,从标准输入管道,

<commands> | paste -s -d+ - | bc

Python中的单行版本:

$ python -c "import sys; print(sum(int(l) for l in sys.stdin))"
链接地址: http://www.djcxy.com/p/6499.html

上一篇: Shell command to sum integers, one per line?

下一篇: Interface vs Abstract Class (general OO)