我有一个具有以下模式的行:
A:B=2, G:E=3, N:M=1
AA:BB=20, DG:EE=30 ;;sssddd;; WN:FFM=10
A:dB=200 ssss G:EASD=300 hellp SSASDN:FFFM=100
我想在一行中汇总所有数字
输出应为
2+3+1 = 6
20+30+10 = 60
200+300+100 = 600
然后我可以使用| bc -q总结它们
答案 0 :(得分:1)
以下是使用awk
awk -F"[^[:digit:].]*" '{t=0;for (i=1;i<=NF;i++) t+=$i;print t}'
6
60
600
非数字的所有内容都设置为字段分隔符
此FS
也应该有效:-F"[=,]"
答案 1 :(得分:1)
sed -r 's/[^0-9 ]//g;s/ +/+/g'
输出:
2+3+1
20+30+10
200+300+100
sed -r 's/[^0-9 ]//g;s/ +/+/g' | bc
输出:
6
60
600
答案 2 :(得分:0)
其中一个应该做你真正想做的事情:
$ awk -F'=' -v OFS='+' '{for (i=2;i<=NF;i++) printf "%s%s", $i+0, (i<NF?OFS:ORS)}' file
2+3+1
20+30+10
200+300+100
$ awk -F'=' -v OFS='+' '{sum=0; for (i=2;i<=NF;i++) { sum+=$i; printf "%s%s", $i+0, (i<NF?OFS:"=" sum ORS)} }' file
2+3+1=6
20+30+10=60
200+300+100=600
$ awk -F'=' '{sum=0; for (i=2;i<=NF;i++) sum+=$i; print sum}' file
6
60
600