每行的awk数组初始化失败

时间:2013-05-03 11:22:31

标签: awk

我有一个日志文件,其中每行包含一些由,分隔的数字。我只想对每个号码进行一些操作。使用awk似乎很容易,但不知何故我卡住了。我用来分割每一行的数组只在第一行初始化一次。之后阵列没有变得清晰。 split应该首先清除数组然后使用它,我甚至使用delete array。但问题仍然存在。任何帮助将不胜感激 以下是一些例子; 这是一个示例文件

[[bash_prompt$]]$ cat log
1,2,3
2
9
1,4
5,7
7
8
6,2

这就是我得到的

[[bash_prompt$]]$ awk '{print "New Line " $1; delete a; split($1,a,","); for(var in a){ print "Array Element " var; } }' log
New Line 1,2,3
Array Element 1
Array Element 2
Array Element 3
New Line 2
Array Element 1
New Line 9
Array Element 1
New Line 1,4
Array Element 1
Array Element 2
New Line 5,7
Array Element 1
Array Element 2
New Line 7
Array Element 1
New Line 8
Array Element 1
New Line 6,2
Array Element 1
Array Element 2

但以下是我所期待的

[[bash_prompt$]]$ awk '{print "New Line " $1; delete a; split($1,a,","); for(var in a){ print "Array Element " var; } }' log
New Line 1,2,3
Array Element 1
Array Element 2
Array Element 3
New Line 2
Array Element 2
New Line 9
Array Element 9
New Line 1,4
Array Element 1
Array Element 4
New Line 5,7
Array Element 5
Array Element 7
New Line 7
Array Element 7
New Line 8
Array Element 8
New Line 6,2
Array Element 6
Array Element 2

我的是GNU Awk 3.1.5。另外我通过使用shell和awk的组合找到了另一种方法(在每一行上单独运行awk)但我想知道我做错了什么

2 个答案:

答案 0 :(得分:0)

for (var in array)将var设置为数组下一个元素的索引,因此var是索引,而不是内容。使用

print "Array Element " a[var]

答案 1 :(得分:0)

您只需设置字段分隔符即可使用split()

awk -F, '{print "New Line",$0;for(i=1;i<=NF;i++)print "Array Element",$i}' log
New Line 1,2,3
Array Element 1
Array Element 2
Array Element 3
New Line 2
Array Element 2
New Line 9
Array Element 9
New Line 1,4
Array Element 1
Array Element 4
New Line 5,7
Array Element 5
Array Element 7
New Line 7
Array Element 7
New Line 8
Array Element 8
New Line 6,2
Array Element 6
Array Element 2