0

我有一个日志文件,其中每一行包含一些以 . 分隔的数字,。我只是想对每个数字进行一些操作。使用 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)但我想知道我做错了什么

4

2 回答 2

0

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

print "Array Element " a[var]
于 2013-05-03T11:49:00.477 回答
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
于 2013-05-03T11:50:39.103 回答