快速计算文本中数据的和
深夜,查看业务数据,忽然想知道一些分散数据的总和,这时已经通过vi操作,将数据按行罗列到文本文件中。当然可以借助excel或者脚本来计算。虽不是特别麻烦,但也不迅速。
最好是能够在shell中就能快速完成。而不是新建一个临时的excel文档,或者一个临时的python脚本。
网上搜罗一番,大概有以下几个方法。
方法一,借助awk
function sum_v1() {
awk '{s+=$1} END {printf "%.0f\n", s}' "$@"
}
方法二,借助bc
首先需要将数据转换成求和的表达式。通过joinByPlus
函数实现字符串的拼接。
function joinByPlus() {
local IFS='+'
echo "$*"
}
这时sum
如下:
function sum_v2() {
files="$@"
joinByPlus $(cat $files) | bc
}
拼接表达是的范式有点繁琐,通过paste
可以更简单地实现。
这时sum
如下:
function sum_v3() {
paste -s -d+ "$@" | bc
}
将以上函数放入rc文件中,这样就可以通过sum <file>
愉快地计算多行数据的和。