awkを使用して複数のファイルの内容を追加する

awkを使用して複数のファイルの内容を追加する

file1, file2, file3名前が...次の形式のファイルがあるとしましょう。

ファイル1

blah blah blah
[PATTERN0]
a10
a20
a30
[PATTERN1]
a11
a21
a31
[PATTERN3]
a13
a13
a33

ファイル2

blah blah blah
[PATTERN0]
b10
b20
b30
[PATTERN1]
b11
b21
b31
[PATTERN3]
b13
b13
b33

私が望むのは、特定のパターン(PATTERN0など)に従うすべてのファイルの各個々のエントリの合計を含むファイルで終わることです。たとえば、ファイルには次のものが必要です。

a10+b10
a20+b20
a30+b30

これまでは、rradを使用して値のみを印刷できます。

awk '/PATTERN0/ {for(i=1; i<=3; i++) {getline;print $1}}' file*

どうすればいいのかご存知ですか?

ベストアンサー1

awk場合、常に2つ以上のファイルがあると仮定すると、すべてのファイルはとの間[PATTERN0]に同じ数の行があり、[PATTERN1]その行は実際には数字です。

awk '
    BEGIN {
        # discard the garbage before [PATTERN0]
        for (i = 1; i < ARGC; i++) {
            do      
                getline str <ARGV[i]
            while (str !~ /\[PATTERN0\]/)
        }

        # read sum from first file, then add numbers in turn from the other files
        while ((getline sum <ARGV[1]) && sum !~ /\[PATTERN1\]/) {
            for (i = 2; i < ARGC; i++) {
                getline nr <ARGV[i]
                sum += nr
            }
            print sum
        }
    }' file1 file2 file3 ...

おすすめ記事