我正在寻找一个命令,它将接受多行文本作为输入,每行包含一个整数,并输出这些整数的总和。
作为一个背景,我有一个日志文件,其中包括时间测量,所以通过 grepping 相关的行,以及一些 sed 重新格式化,我可以列出该文件中的所有时间。然而,我想计算出总数,而且我的思绪已经变得空白,因为任何命令我都可以将这个中间输出传递到最终总和。我过去总是使用expr
,但除非它在 RPN 模式下运行,否则我认为它不会应付这个问题(即使这样也会很棘手)。
我错过了什么?鉴于可能有多种方法可以实现这一点,我将很乐意阅读(并提升)任何有效的方法,即使其他人已经发布了一个不同的解决方案来完成这项工作。
相关问题: 在 Unix 上计算一列输出总和的最短命令? ( 来自 @Andrew )
更新 :哇,正如所料,这里有一些不错的答案。看起来我一定要把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
或者,当从 stdin 管道时,
<commands> | paste -s -d+ - | bc
Python 中的单行版本:
$ python -c "import sys; print(sum(int(l) for l in sys.stdin))"