AWK: 2個のファイルの結合
N行の file0 と M行の file1 を共通のキーを元に結合する。(N, M > 0)
AWKを使い、少ない計算量で実現したい。
・file0
1: 1 one 2: 2 two 3: 3 three 4: 4 four 5: 5 five・file1
1: 3 2: 5 3: 2 4: 4 5: 1 6: 2 7: 3 8: 5この時、組み込み変数「NR(入力行)」と「FNR(ファイルの入力行)」を使用したトリッキーなレシピがある。
・num_to_alpha.awk
1: #!/usr/bin/nawk -f 2: 3: NR == FNR { 4: dict[$1] = $25: next
6: } 7: 8: { 9: print dict[$1] 10: }NR=FNR の場合、現在のレコードは最初のファイルであることと同値。
2個目のファイルであれば、NR=N+FNR となるからだ。
最初のファイルの読み込みでは、データをメモリへ格納するのみ。
2個目のファイルの読み取りの際に、連想配列からデータを参照して出力する。
・出力結果
1: $ ./num_to_alpha.awk ./file0 ./file1 2: three 3: five 4: two 5: four 6: one 7: two 8: three 9: fiveこれで計算量はO(N + M log N)となる。
0 件のコメント:
コメントを投稿