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
来获取数字,我该怎么办呢?
答案 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'|公元前