在GAWK中扫描数组的所有元素会返回数字而不是值

时间:2009-06-18 22:47:36

标签: arrays string gawk

给出以下功能:

function process_pipes(text)
{
    split(text,recs,"|");
    for (field in recs){
        printf ("|%s|\n", field)
    }
}

如果输入为:0987654321 | 57300 |找不到错误帐号| GDUMARESQ | 0199 | 9 | N | 0 ||

为什么我得到下面的数字而不是文字?

|4|
|5|
|6|
|7|
|8|
|9|
|10|
|1|
|2|
|3|

2 个答案:

答案 0 :(得分:2)

因为

for ... in 

为您提供。使用

printf("|%s|\n",recs[field]);

获取值。

答案 1 :(得分:2)

split在您的代码中创建一个数组recsrecs[1] == 0987654321等。

for (field in recs)循环生成索引列表,而不是数组元素。

因此,您需要:

function process_pipes(text)
{
    split(text,recs,"|");
    for (field in recs){
        printf ("|%s|\n", recs[field])
    }
}