1

我正在寻找使用 awk 或 sed 搜索文件,当它遇到特定的字母/子字符串时,它会在它之前插入一个新行。我的文件示例如下:

"ABC" "3 0 1 0 1" "ABC" "0 2 0 2 0"

因此,当它找到字符串 ABC 时,它会插入一个新行,因此输出如下所示:

"ABC" "3 0 1 0 1"
"ABC" "0 2 0 2 0"

然后,一旦它完成了这一步,我想将这些值相加,给出如下输出:

"ABC" "3 0 1 0 1" "5"
"ABC" "0 2 0 2 0" "4"
4

2 回答 2

0

如果你有GNU awk那么这将做的伎俩:

BEGIN {
    FPAT="\"[^\"]+\""                    # Describe the field pattern
}
{
    for (i=1;i<=NF;i+=2) {               # Loop over all the fields
        n=split($(i+1),x,/[\" ]/)        # Split the numbers fields
        s = 0                            # Variable for the sum of number field
        for (j=2;j<n;j++) {              # Loop over each number in field
            s += x[j]                    # Summation
        }
        print $i,$(i+1),"\""s"\""        # Print field pairs and sum
    }
}

将其保存到文件中script.awk并运行如下:

$ awk -f script.awk file
"ABC" "3 0 1 0 1" "5"
"ABC" "0 2 0 2 0" "4"
于 2013-07-30T09:56:06.813 回答
0

为简单起见,我会在 2 遍中完成:

$ cat file
"ABC" "3 0 1 0 1" "ABC" "0 2 0 2 0"

$ awk -v t='"ABC"' '{gsub(" *"t,"\n"t)}1' file |
    awk -F\" 'NF{split($4,a,/ /); s=0; for (i in a) s+=a[i]; print $0, FS s FS}'
"ABC" "3 0 1 0 1" "5"
"ABC" "0 2 0 2 0" "4"
于 2013-07-30T13:50:21.553 回答