将元素追加到关联数组awk

时间:2015-05-11 23:47:19

标签: awk associative-array

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

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

我想追加一个关联数组的元素,

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

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

E1 E2
E3 E4

但输出是:

E2
E4

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

1 个答案:

答案 0 :(得分:1)

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

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

获得你想要的东西是一个天真的解决办法:

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

但有两点需要注意:

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