awkで配列を削除する


18

awkでは、ループを使用して配列をクリアし、空の配列にすることができます。これは、削除と同等です。

for (key in array) delete array[key];

もっと簡単な方法はありますか?変数名をスカラーに再利用できるように、配列を完全に削除できますか?

回答:


29

構文

delete array

POSIXの現在のバージョンではありませんが、実質的にすべての既存の実装(元のawk、GNU、mawk、BusyBoxを含む)でサポートされています。POSIXの将来のバージョンで追加される予定です(障害0000544を参照)。

移植性があり、標準に準拠し、ステートメントではなく式であるすべての配列要素をクリアする別の方法は、split既存のすべての要素を削除することです。

split("", array, ":")

を含むこれらすべてはdelete array、元のawk、GNU awkおよびmawk(BusyBox awkではなく)で、変数を配列変数としてマークしたままにします。私の知る限り、変数が配列として使用されると、それをスカラー変数として使用する方法はありません。


代替の分割ソリューションは役に立ちました。SCO Openserver 5.0.7 awkがdelete array構文エラーを呼び出すのを発見したのは驚きでしたが、manページには添え字がオプションであると書かれています。エラーとして表示されていません$ awk 'BEGIN { A[1] = 0; delete A; }' awk: Syntax error at line 1 of program << BEGIN { A[1] = 0; de ... >> context is BEGIN { A[1] = 0; delete >>> A; <<< awk: illegal statement at line 1 of program << BEGIN { A[1] = 0; de ... >>delete array[subscript]、機能しませんでした。また、上の多くの亜種array[subscript] = ""がすべて同様に無効であることがわかりました。
kbulgrien

1
それともsplit("", array)
ryenus
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.