在将csv拆分为新行awk时无法从一个获取数组值

时间:2018-03-30 10:37:21

标签: shell awk

echo "Main1,one,two,three,four" |awk '{ split($1,a,",");for (i in a) print i,")",a[i]; }'

实际输出:
2)一个 3)两个
4)三
5)四 1)Main1

预期产量:
1)Main1
2)一个 3)两个
4)三
5)四个

我尝试了以下命令并错过了最后一个值:

echo "Main1,one,two,three,four" |awk '{ split($1,a,",");for (i in a) print i-1,"\b)",a[i-1]; }'

输出:
1)Main1
2)一个 3)两个
4)三
0)

无法找到最后一个打印第一个值的原因。

2 个答案:

答案 0 :(得分:4)

我建议:

echo "Main1,one,two,three,four" |awk -F ',' '{ for(i=1; i<=NF; i++) print i")",$i }'

输出:

1) Main1
2) one
3) two
4) three
5) four

答案 1 :(得分:3)

默认情况下,未定义'for(indx in array)'循环扫描数组的顺序;它通常基于awk内部数组的内部实现。来源:https://www.gnu.org/software/gawk/manual/html_node/Controlling-Array-Traversal.html

如果要按索引升序处理数组,请使用:

n=split($1,a,",")
# maybe an if(n) here
for(i=1;i<=n;i++)
    print i,")",a[i]