awk 拆分返回索引



我想获取一个名为 ids 的数组,其中包含作为变量传递的字符串中的所有值:

426
425
422
415
405
397
349
310
254
167
0

我发现这段代码应该可以工作:

awk -v branches="426;425;422;415;405;397;349;310;254;167;0" 'BEGIN { split( branches, ids, ";" ); for (id in ids){print id}}'

但是它给了我:

1
2
3
4
5
6
7
8
9
10
11

如果我从 BEGIN 块中取出它,它只是停在那里并且什么也不输出......

如果您希望值成为数组的键,则需要再执行一个步骤。

$ awk -v branches="426;425;422;415;405;397;349;310;254;167;0" '
        BEGIN {n=split(branches,idV,";"); 
               for(i=1;i<=n;i++) ids[idV[i]]; 
               for(id in ids) print id}'
0
167
254
310
349
397
405
415
422
425
426

请注意,这些值不会采用相同的广告顺序。 这可以称为哈希集,而不是数组。

这是 perl 版本:

echo "426;425;422;415;405;397;349;310;254;167;0" | perl -ne ' chomp;print(join("n",sort(split(/;/))))'
0
167
254
310
349
397
405
415
422
425

chomp - 删除换行符。

最新更新