我正在寻找一个命令,它将接受多行文本作为输入,每行包含一个整数,并输出这些整数的总和.
作为一个背景,我有一个日志文件,其中包括时序测量,所以通过grepping相关的行,并稍微sed重新格式化,我可以列出该文件中的所有时间.然而,我想计算出总数,而且我的思绪已经变得空白,因为任何命令我都可以将这个中间输出传递到最终总和.我过去总是使用expr它,但除非它运行在sed我认为它不会应付这个(即使那样它也会很棘手).
我错过了什么?鉴于可能有多种方法可以实现这一点,我将很乐意阅读(和expr)任何有效的方法,即使其他人已经发布了一个不同的解决方案来完成这项工作.
相关问题:在Unix上计算一列输出总和的最短命令?(来自@Andrew)
更新:哇,正如所料,这里有一些不错的答案.看起来我一定要进行sed更深入的检查expr!
我有一个CSV文件,我想从中提取一些信息:对于一个列中的每个不同值,我想计算另一列中相应值的总和.最终,我可以用Python做,但我相信可以使用简单的解决方案awk.
这可能是CSV文件:
2 1:2010-1-bla:bla 1.6
2 2:2010-1-bla:bla 1.1
2 2:2010-1-bla:bla 3.4
2 3:2010-1-bla:bla -1.3
2 3:2010-1-bla:bla 6.0
2 3:2010-1-bla:bla 1.1
2 4:2010-1-bla:bla -1.0
2 5:2010-1-bla:bla 10.9
Run Code Online (Sandbox Code Playgroud)
我想得到:
1 1.6
2 4.5
3 5.8
4 -1.0
5 10.9
Run Code Online (Sandbox Code Playgroud)
现在,我只能提取:
a)第一列的值:
awk -F ' ' '{print $(2)}' MyFile.csv | awk -F ':' '{print $(1)}'
Run Code Online (Sandbox Code Playgroud)
然后得到:
1
2
2
3
3
3
4
5
Run Code Online (Sandbox Code Playgroud)
b)和值相等,例如,1.1在最后一栏中:
awk -F ' ' '{print $(NF)}' MyFile.csv | awk '$1 == 1.1'
然后得到:
1.1 …Run Code Online (Sandbox Code Playgroud) 我正在尝试进行递归grep搜索,例如:
grep -r -c "foo" /some/directory
Run Code Online (Sandbox Code Playgroud)
这给我输出auch为:
/some/directory/somefile_2013-04-08.txt:0
/some/directory/somefile_2013-04-09.txt:1
/some/directory/somefile_2013-04-10.txt:4
...etc
Run Code Online (Sandbox Code Playgroud)
但是,我想获得所有文件中的匹配总数,例如:
Total matches: 5
Run Code Online (Sandbox Code Playgroud)
我已经玩了一些其他的例子,比如在这个帖子中,虽然我似乎无法做到应该如此简单的事情.
关于整数加单行,存在几种建议的 shell 脚本解决方案;
然而,仔细观察所选择的每个解决方案,都存在固有的局限性:
awk 那些会以任意精度和整数大小窒息(毕竟它的行为类似于 C)bc 宁愿对任意长的输入不满意: (sed 's/$/+\\/g';echo 0)|bc了解可能存在跨平台的可移植性问题(参见 [1] [2]),这是不受欢迎的,是否有一个通用的解决方案,它在实用性和简洁性上都是赢家?
提示:SunOS 和 MacOSX 是可移植性成为问题的示例。
菲。dc命令可以允许处理任意大的 2^n、整数或其他输入吗?
[1] awk:https : //stackoverflow.com/a/450821/1574494或/sf/answers/1767151781/或在 awk 中打印长整数
[2] bc: Bash 命令对一列数字求和
我有一个以下格式的文件
id_1,1,0,2,3,lable1
id_2,3,2,2,1,lable1
id_3,5,1,7,6,lable1
Run Code Online (Sandbox Code Playgroud)
我想要每列的总和(我有超过300列)
9,3,11,10,lable1
Run Code Online (Sandbox Code Playgroud)
我怎么能用bash做到这一点.我尝试使用这里描述的但没有奏效.
我做了cat results.txt | grep eval,我得到了
eval: -2.72907
baseline eval (random): -0.031584202184
eval: 0.807805
baseline eval (random): 0.0227601966463
eval: 2.0625
baseline eval (random): 0.0138953249621
Run Code Online (Sandbox Code Playgroud)
如何总结eval,并baseline eval通过命令行Linux命令分开?