我想要一个bash命令,我可以管道将一列数字相加。我只是想要一个快速的一行程序,基本上是这样做的:

cat FileWithColumnOfNumbers.txt | sum

当前回答

两行算吗?

awk '{ sum += $1; }
     END { print sum; }' "$@"

然后你就可以不用多余的'cat'了:

sum < FileWithColumnOfNumbers.txt
sum   FileWithColumnOfNumbers.txt

FWIW:在MacOS X上,你可以用一行程序完成:

awk '{ sum += $1; } END { print sum; }' "$@"

其他回答

如果你安装了ruby

cat FileWithColumnOfNumbers.txt | xargs ruby -e "puts ARGV.map(&:to_i).inject(&:+)"

使用现有文件:

paste -sd+ infile | bc

使用stdin:

<cmd> | paste -sd+ | bc

编辑: 对于一些粘贴实现,你需要更明确地从stdin读取:

<cmd> |粘贴-sd+ - | BC

选择使用:

-s (serial) -将所有行合并为一行 -d -使用非默认分隔符(在本例中为字符+)

while read -r num; do ((sum += num)); done < inputfile; echo $sum

下面的命令将添加所有行(awk输出的第一个字段)

awk '{s+=$1} END {print s}' filename
[root@pentest3r ~]# (find / -xdev -size +1024M) | (while read a ; do aa=$(du -sh $a | cut -d "." -f1 ); o=$(( $o+$aa )); done; echo "$o";)