将元素附加到关联数组 awk

Appending an element to associative array awk

我有一个包含几个字段的输入文件 (input.txt):

A1  B1  C1  D1  E1
A2  B2  C2  D1  E2
A3  B3  C3  D2  E3
A4  B4  C4  D2  E4

我想附加关联数组的元素,

awk '{a[]=a[] ; print a[]} END {for(b in a) {print a[b]}}' input.txt

我认为输出应该是(即E2连接到E1,E4连接到E3):

E1 E2
E3 E4

但输出是:

E2
E4

我不确定我的代码有什么问题?

您的输出与您的命令不一致,但我假设您需要以下内容:

  • 为每个唯一的第 4 列值构建第 5 列值的列表
  • 打印这些列表,前面是相应的第 4 列值

获得你想要的东西的一个简单的解决方法是:

$ awk '{a[]=a[] " " } END {for (b in a) { print b; print a[b]}}' input.txt
D1
 E1 E2
D2
 E3 E4

但有两点需要注意:

  • 累积的第 5 列值将有前导 space - 在这种情况下这恰好有助于分组输出。
  • 由于使用 for (b in a) 枚举键,因此第 4 列值将不会按照它们在输入中出现的顺序出现,因为 awk 枚举其 [always associative] 数组基于内部散列值,它与数组元素 添加 的顺序没有保证关系(通常也不保证任何特定顺序)。