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