我想要一个bash命令,我可以管道将一列数字相加。我只是想要一个快速的一行程序,基本上是这样做的:
cat FileWithColumnOfNumbers.txt | sum
我想要一个bash命令,我可以管道将一列数字相加。我只是想要一个快速的一行程序,基本上是这样做的:
cat FileWithColumnOfNumbers.txt | sum
当前回答
下面的命令将添加所有行(awk输出的第一个字段)
awk '{s+=$1} END {print s}' filename
其他回答
使用现有文件:
paste -sd+ infile | bc
使用stdin:
<cmd> | paste -sd+ | bc
编辑: 对于一些粘贴实现,你需要更明确地从stdin读取:
<cmd> |粘贴-sd+ - | BC
选择使用:
-s (serial) -将所有行合并为一行 -d -使用非默认分隔符(在本例中为字符+)
你可以用计算器。假设使用#s的文件名为“n”:
$ cat n
1
2
3
$ (cat n | tr "\012" "+" ; echo "0") | bc
6
tr将所有换行符更改为“+”;然后在最后一个加号后面加上0,然后将表达式(1+2+3+0)输往计算器
或者,如果你可以使用awk或perl,下面是perl的一行代码:
$perl -nle '$sum += $_ } END { print $sum' n
6
如果你安装了ruby
cat FileWithColumnOfNumbers.txt | xargs ruby -e "puts ARGV.map(&:to_i).inject(&:+)"
使用for循环遍历你的文件…
sum=0; for x in `cat <your-file>`; do let sum+=x; done; echo $sum
两行算吗?
awk '{ sum += $1; }
END { print sum; }' "$@"
然后你就可以不用多余的'cat'了:
sum < FileWithColumnOfNumbers.txt
sum FileWithColumnOfNumbers.txt
FWIW:在MacOS X上,你可以用一行程序完成:
awk '{ sum += $1; } END { print sum; }' "$@"