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 に答える