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