将元素附加到关联数组 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] 数组基于内部散列值,它与数组元素 添加 的顺序没有保证关系(通常也不保证任何特定顺序)。
我有一个包含几个字段的输入文件 (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] 数组基于内部散列值,它与数组元素 添加 的顺序没有保证关系(通常也不保证任何特定顺序)。