awkには、連想配列として配列が用意されていますが、pythonやperlのように配列操作が充実してないですよね。

特に、unshift・shift・push・pop関数に関しては、あるとほんと便利なので、自作して使いまわしています。

下記に紹介してみたいと思います(あくまで自作なので、本来のunshift・shift・push・pop関数と異なる場合があるのはご了承ください)。

スポンサーリンク

サンプルコード

unshift・shift・push・pop関数を、それぞれユーザー定義関数としてunshiftArr()・shiftArr()・pushArr()・popArr()を定義しています。in.txtを一行ずつ読み込んで、unshiftArr()をcallして1フィールド(列)目を配列の先頭に詰めていきます。その後、ENDブロックで、unshiftArr()・shiftArr()・pushArr()・popArr()を順に実行しています。

例えば、下記のin.txtがあったとします。

下記がサンプルコードになります。

下記が実行結果になります。

スポンサーリンク

awkでunshift関数を自作

unshiftについては下記のようにユーザー定義しています。
実行すると、配列arrの先頭に、文字列instrを入力します。

awkでshift関数を自作

shiftについては下記のようにユーザー定義しています。
実行すると、配列arrの先頭が削除されます。

awkでpush関数を自作

pushについては下記のようにユーザー定義しています。
実行すると、配列arrの後尾にinStrが入力されます。

awkでpop関数を自作

popについては下記のようにユーザー定義しています。
実行すると、配列arrの後尾が削除されます。

**
空の配列を引数にしたときの挙動について、ご指摘を頂きました。
下記のように、空の場合はreturnするようにして変更いたしました。
引数に設定した時点で空の配列が生成されてしまいますが、生成した配列のdeleteは読び出し側の責務で行うようにと考えました。
また、pop時に値を返していませんが、これは自作した時に必要がなかったので、あえて返していないのが実情です。
本記事の趣旨は自作の関数の紹介なのでこのままにさせてください。
一連のご指摘を頂きました読者様ありがとうございました。

スポンサーリンク