5
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[awk] 配列を二次元配列として使う

Last updated at Posted at 2015-07-01

awkにおける多次元配列

awkでは、他言語でよく見かける多次元配列という機能が実装されていません。しかし、一次元配列を工夫すれば、多次元配列として利用することができます。

その方法とは、引数にカンマ区切りで値を複数格納させます。例えば、x[y, z]だと、引数にyとzをとる二次元配列として使えます。

入力データ例

001 1 yamada
002 3 suzuki
003 5 tanaka

コード例

awk '{
    names[$1, $2] = $3;
}
END {
    for (i in names) {
        print i, names[i];
    }
}' test.txt

ENDの部分で格納した配列をすべて表示させる処理を行っています。

出力結果

0023 suzuki
0011 yamada
0035 tanaka

特定の要素を取得

仕組みとしては、添え字が文字列に変換され、間にセパレータをはさみ一次元配列の引数として解釈されます。

したがって、特定の要素を取得する場合の例は次のようになります。

awk '{
    names[$1, $2] = $3;
}
END {
    print names["002", "3"];
}' test.txt

この結果、suzukiが出力されます。

ちなみに、文字列間をつなぐセパレータとは、デフォルトで"\034"と決められており、先ほどの例だと、names["002\0343"]という形でアクセスしてもsuzukiという要素が取得できます。

以上、awkで擬似的に多次元配列を使う方法でした。ここでは、二次元配列のみ紹介しましたが、2より大きな次元の配列になっても話は同じです。

5
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?