6
杰克 10
Ĵ 10
一个 20
卢卡 20
公元前 U 20

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

但我不能cat input|cut -d " " -f 3用来获取数字,我该怎么做?

4

3 回答 3

17

您可以使用 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
于 2012-05-18T03:38:07.630 回答
0

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

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

(我确信使用 sed 或 awk 有更优雅的方法,这只是添加终止 '0' 以使 bc 高兴的快速技巧。分别运行命令的不同部分以找出发生了什么在)

于 2012-05-18T03:29:47.150 回答
0

您可以用 + 替换所有空格并将结果传递给 bc

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

于 2019-10-04T03:52:01.213 回答