Scripting 对图案之间的第四个字段数据求和

Scripting 对图案之间的第四个字段数据求和,scripting,Scripting,假设我的数据是: *dnet*1234 1.2 1端口*12 2.3 3端口1*34 0.2 7*150.1 *dnet*234 0.2 2*120.1 4*123*234 1.2 字段之间用空格隔开 在这里,我想得到每个*dnet中存在的第四个数据字段的总和。有些字段有第四个字段数据,有些字段没有。我想要第四个字段的和值,每个*dnet分开 我尝试使用awk,但无法获得。如果有人帮忙,我们会很感激的 上面的输出如下所示 *dnet*1234 1.2 2.5 *dnet*234 0.2 1.2评

假设我的数据是:

*dnet*1234 1.2

1端口*12 2.3

3端口1*34 0.2

7*150.1

*dnet*234 0.2

2*120.1

4*123*234 1.2

字段之间用空格隔开

在这里,我想得到每个*dnet中存在的第四个数据字段的总和。有些字段有第四个字段数据,有些字段没有。我想要第四个字段的和值,每个*dnet分开

我尝试使用awk,但无法获得。如果有人帮忙,我们会很感激的

上面的输出如下所示

*dnet*1234 1.2 2.5


*dnet*234 0.2 1.2评论,略为简化,评论版本

awk '
    # look for header line
    $1=="*dnet" {
        # print any previously calculated sum
        if (header) print header, sum

        # reset sum for next block of lines
        sum = 0

        # save new header line
        header = $0

        # skip remaining actions
        next
    }

    # if we get here, we know this is not a header line
    # if there is a 4th field, add it to the sum
    $4 {
        sum += $4
    }

    END {
        # print the final sum
        if (header) print header, sum
    }
' datafile

显示一个特定输入的输出示例
awk'函数p(){if(n){print n,s;n=s=0}}$1==“*dnet”{p();n=$0;next}$4{s+=$4}END{p()}数据
非常感谢,伙计,这很有效。你太棒了!你能解释一下代码吗。这会有帮助的