【发布时间】:2016-10-24 12:14:15
【问题描述】:
我有一个input 文件,内容如下
child, parent, val
1 , 0 , a
2 , 1 , b
3 , 1 , c
4 , 2 , d
5 , 2 , e
我需要将它们存储在一个名为data_array 的数组中,方法是直接从不带标题的文件中读取。像这样的
BEGIN {
while (getline < "input")
{
split($0,ft,",");
child=ft[1];
parent=ft[2];
value=ft[3];
#need help here in assigning two values into the array
data_array[child]=parent,value;
}
close("input");
}
result_array 保存有排序的父子关系。
result_array[parent]="all children separated by comma"
例如,父母 0 有一个孩子叫 1。父母 1 有两个孩子叫 2 和 3。
2 和 3 的顺序是通过按字母顺序对相应值进行排序来确定的。
由于值的排序导致b 后跟c,因此数组元素应该有2,3。
可以有任意数量的孩子。
无子节点必须使用空白内容写入。
这些结果必须按以下格式进入最终数组。
在这部分需要帮助将 data_array 转换为 result_array
result_array["0"] = "1"
result_array["1"] = "2,3"
result_array["2"] = "4,5"
result_array["3"] = ""
result_array["4"] = ""
result_array["5"] = ""
如果不清楚请大喊。
【问题讨论】:
-
你可以使用
NR > 1跳过第一行,但是这里的data_array似乎是一个映射而不是一个数组 -
如果您曾经考虑使用
getline,请确保您首先阅读并完全理解awk.freeshell.org/AllAboutGetline,以了解何时以及如何使用它。 edit 您的问题包括简洁、可测试的样本输入和预期输出,以便我们可以帮助您以正确的方式做任何事情。 -
@EdMorton 我的经验告诉我 awk.getline 非常棘手......我也在你的一个 cmets 中找到了链接的文档。这是必读的 getline 指南。现在我只在必要时才选择 getline..