2 つのファイルを紐付けする

外部ファイルを1行ずつ読み込んで特定カラムを引数として にインスパイヤされて、2 つのファイルを紐付けします。

いくつか方法はあると思うのですが、ここでは getline を使って連想配列に片方のファイルの情報を格納する方法を使ってみます。

#! /usr/local/bin/nawk -f
# connect_2logs.awk
# 2 つのファイルを紐付けする
# usage: nawk -f connect_2logs.awk log1 log2

BEGIN {

    log_1 = ARGV[1];
    log_2 = ARGV[2];

    while (getline < log_2 > 0) {
        log_item[$1] = $2;
    }
    close(log_2);

    while (getline < log_1 > 0) {
        print $1, $2, log_item[$2];
    }
    close(log_1);

}

最初の getline で格納して紐付けを行い、もうひとつの getline で出力するようになっていますが、ここでは全て BEGIN ブロックで処理をしています。

$ cat sample1.log
0001 AAAA
0002 BBBB
0003 AAAA
0004 CCCC

$ cat sample2.log
AAAA ABC
BBBB DEF
CCCC GHI

$ nawk -f connect_2logs.awk sample1.log sample2.log
0001 AAAA ABC
0002 BBBB DEF
0003 AAAA ABC
0004 CCCC GHI

awk では比較的不得意とする分野なのかもしれませんので、shell や Perl の方がうまく記述できるかもしれません。

tag_nawk.png tag_nawk.png tag_nawk.png tag_nawk.png