web-dev-qa-db-ja.com

awkの配列を削除する

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

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

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

構文

delete array

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

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

split("", array, ":")

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