【问题标题】:awk allow associative array contain value as array?awk 允许关联数组包含值作为数组吗?
【发布时间】:2017-06-19 02:39:50
【问题描述】:

我的输入数据是这样的

key1  value1
key2  value2  value3  value4
key1  value3

我的预期输出将是

key1:  value1  value3
key2:  value2  value3 value4

我正在考虑使用从键到数组的关联映射。但似乎这是不允许的。我正在使用下面的实现,但总是出错:

function alen(a) {
    k = 0
    for(i in a) k++
    return k
}

BEGIN{}
{
    mylist=mymap[$1];
    mylist[alen( mylist )+1]=$2;   
    <==fatal: attempt to use scalar parameter `a' as an array

    mymap[$1]=mylist;
}

错误是“致命:尝试将标量参数‘a’用作数组”,如上所示在“mylist”上调用 alen 函数时。任何解决方法?非常感谢

【问题讨论】:

  • 解决方法是什么?第 1 行 mylist=mymap[$1] 声明 mylist 是一个标量(初始化为存储在 mymap[$1] 中的值),然后第 2 行 alen( mylist ) 轮胎使用标量变量 mylist 作为数组,这自然会产生语法错误消息告诉你错误。

标签: awk associative-array


【解决方案1】:

这是你想要做的:

$ awk '{for (i=2; i<=NF; i++) arr[$1] = arr[$1] FS $i} END{for (key in arr) print key ":" arr[key]}' file
key1: value1 value3
key2: value2 value3 value4

如果没有,请编辑您的问题以提供更清晰的解释和更好地展示您的需求的示例。

由于in 运算符,上面将按随机顺序输出关键行,如果这是一个问题,很容易修复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-01
    • 2014-06-21
    • 2014-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多