正规格式帮助想要

时间:2014-07-26 05:16:02

标签: regex linux sed grep

我有一个具有以下模式的行:

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总结它们

3 个答案:

答案 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