xt 发帖数: 17532 | 1 今天恶补awk,写了这么个小程序
#!/bin/awk -f
BEGIN {
}
{
print "initLen=", length(testvar), "\n"
testvar[length(testvar) + 1]=1
testvar[length(testvar) + 2]=2
for (i = 1; i <= length(testvar); ++i) {
print "testvar[", i, "]=", testvar[i], "\n"
}
}
结果:
awk: test2.awk: line 7: illegal reference to variable testvar
awk: test2.awk: line 8: illegal reference to variable testvar
awk: test2.awk: line 10: illegal reference to variable testvar
请问为什么出错? | l*******G 发帖数: 1191 | 2 testvar is dynamic, did you allocate memory? | xt 发帖数: 17532 | 3 解释语言还要先给内存啊?
【在 l*******G 的大作中提到】 : testvar is dynamic, did you allocate memory?
| l****g 发帖数: 122 | 4 testvar如何定义的?如何知道它是array?
稍加改动就可以跑,看看你就知道为什么你的不可以了-
#!/bin/awk -f
BEGIN {
}
{
split($0, testvar)
print "initLen=", length(testvar), "\n"
testvar[length(testvar) + 1]=1
testvar[length(testvar) + 2]=2
for (i = 1; i <= length(testvar); ++i) {
print "testvar[", i, "]=", testvar[i], "\n"
}
}
~/work/shell $ echo "1 2 3" | awk -f xx6.awk
initLen= 3
testvar[ 1 ]= 1
testvar[ 2 ]= 2
testvar[ 3 ]= 3
testvar[ 4 ]= 1
testvar[ 5 ]=
testvar[ 6 ]= 2 | xt 发帖数: 17532 | 5 是这样:我没有看到awk在什么地方可以declare数据类型,但是
我想把一个文件直接用awk读入,然后split再处理,就是用那个
-F选项。当然我知道也可以用cat导入,但是这样是不是就失去
了原有的行号?因为文件头要单独处理。
【在 l****g 的大作中提到】 : testvar如何定义的?如何知道它是array? : 稍加改动就可以跑,看看你就知道为什么你的不可以了- : #!/bin/awk -f : BEGIN { : } : { : split($0, testvar) : print "initLen=", length(testvar), "\n" : testvar[length(testvar) + 1]=1 : testvar[length(testvar) + 2]=2
|
|