数组数组的排序与awk中的多维数组有何不同?

数组数组的排序与awk中的多维数组有何不同?,awk,Awk,我已经解决了一个问题,列出了一组具有组件的项,这些项在awk中又具有属性 我试图从两个方面来解决这个问题 1) 定义数组列表[项目编号、组件编号][属性]。 2) 定义一个数组列表[项目编号][组件编号][属性]。 这在很多方面都很有趣,因为我注意到(2)保持了插入顺序,而(1)没有。我知道阵列在awk中是关联的,这很可能是巧合。然而,由于插入顺序在我的案例中很重要(同时,我想了解更多关于awk的信息),我想知道是否会发生这种情况以及原因 有什么想法吗? 溴 Patrik两种方法都没有保留任何关

我已经解决了一个问题,列出了一组具有组件的项,这些项在awk中又具有属性

我试图从两个方面来解决这个问题

1) 定义数组
列表[项目编号、组件编号][属性]。

2) 定义一个数组
列表[项目编号][组件编号][属性]。

这在很多方面都很有趣,因为我注意到(2)保持了插入顺序,而(1)没有。我知道阵列在awk中是关联的,这很可能是巧合。然而,由于插入顺序在我的案例中很重要(同时,我想了解更多关于awk的信息),我想知道是否会发生这种情况以及原因

有什么想法吗? 溴
Patrik

两种方法都没有保留任何关于插入顺序的信息,如果两种方法都保留了,那么这只是巧合。如果插入顺序对您很重要,那么您需要编写一些代码来跟踪该顺序,例如

key = foo FS bar
if ( !(key in list) ) {
    keys[++numKeys] = key
}
list[key] = whatever
将按索引插入的顺序为您提供索引的数组
键[]
,以及将每个键映射到其值的数组
列表[]
,以便您以后可以执行以下操作:

for (keyNr=1; keyNr<=numKeys; keyNr++) {
    key = keys[keyNr]
    print list[key]
}

用于(keyNr=1;keyNr我想我会尝试在订单中使用这种方法。不幸的是,这似乎是awk的致命弱点。谢谢你的提示!亲爱的Ed,为什么你更喜欢
FS
而不是
subsp
?@patrik不客气,但这根本不是致命弱点。为什么要跟踪插入顺序并在更新时占用所有人的时间和内存很少有应用程序需要它,而且在需要时编写代码来支持它也很简单。Awk是一种执行速度非常快的小型语言(通常比等效的C程序快)因为它的理念是只提供语言结构来完成现有结构难以完成的事情,而这一点也不难做到。所以它是“赞成”,而不是“反对”@ Kvutor,因为虽然不太可能,但子SEP可以出现在输入字段中,而默认FS不能。它也是一对类型的字符较短,并且当您要打印数组索引时,空白或其他字符串比子SEP更容易看到。如果您使用FEXEP为FS,那么方程会改变,然后我会考虑使用OFS与子SEP.AL。值得一提的是,如果键是由浮点数生成的,您可能需要调整
CONVFMT