删除awk中的数组


18

在awk中,我可以使用循环清除数组,使其成为空数组,这等效于删除它。

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

有没有更简单的方法?我可以完全删除一个数组,以便可以将变量名重新用于标量吗?

Answers:


29

语法

delete array

在POSIX中不是当前版本,但几乎所有现有实现(包括原始的awk,GNU,mawk和BusyBox)都支持它。它将在POSIX的将来版本中添加(请参见缺陷0000544)。

清除所有数组元素的另一种方法是可移植且符合标准,并且是表达式而不是语句,它依赖于split删除所有现有元素:

split("", array, ":")

所有这些,包括delete array,在原始awk,GNU awk和mawk(但不在BusyBox awk中)中将变量标记为数组变量。据我所知,一旦将变量用作数组,就无法将其用作标量变量。


替代拆分解决方案很有帮助。delete array尽管手册页说下标是可选的,但发现SCO Openserver 5.0.7 awk调用语法错误令人惊讶。$ 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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.