bc:获取num列表的总和

时间:2012-05-18 03:16:06

标签: unix bc


Jack   10
J      10 
A      20 
Lu cal 20
A bc U 20

我想得到这些数字的总和:10 + 10 + 20 + 20 + 20 = 80

但我无法使用cat input|cut -d " " -f 3来获取数字,我该怎么办呢?

3 个答案:

答案 0 :(得分:10)

您可以使用grep + paste + bc

$ grep -oE '[0-9]+' file
10
10
20
20
20

$ grep -oE '[0-9]+' file | paste -s -d + - 
10+10+20+20+20

$ grep -oE '[0-9]+' file | paste -s -d + - | bc
80

而不是grep,你可以使用cut

$ cut -c 8- file

或只是awk

$ awk '{print $NF}' file

但是如果你可以使用awk,你可以使用awk求和

$ awk '{total += $NF} END { print total }' file

答案 1 :(得分:0)

假设您的文件名为input.txt:

echo `sed 's/[^0-9]*\([0-9]*\).*/\1+/' input.txt` '0' | bc

(我确信有一种更优雅的方式来使用sed或者awk,这只是一个快速的黑客添加终止'0'以使bc高兴。分别运行命令的不同部分来图发生了什么事情)

答案 2 :(得分:0)

您可以将所有空格替换为+,然后将结果通过管道传送到bc

回显“ 5 6 2” | sed -E -e's / \ s + / + / g'|公元前