ʕ•ᴥ•ʔ RUNNINGJ

快速计算文本中数据的和

深夜,查看业务数据,忽然想知道一些分散数据的总和,这时已经通过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>愉快地计算多行数据的和。

#shell