l****g 发帖数: 122 | 1 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 | 2 今天恶补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
请问为什么出错? |
|
xt 发帖数: 17532 | 3 【 以下文字转载自 Linux 讨论区 】
发信人: xt (拷贝猫), 信区: Linux
标 题: awk问题求救
发信站: BBS 未名空间站 (Sat Nov 17 18:13:38 2012, 美东)
今天恶补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: te... 阅读全帖 |
|
r******l 发帖数: 10760 | 4 你从头到尾没给testvar赋值,它的值当然不会改变了。
当然,你更可能是想改变(*testvar)的值,而不是testvar本身的值。但是你也没给(*
testvar)赋过值啊。你最后那行如果该成*temp = "a",因为此时temp跟testvar一样了
,所以相当于给*testvar赋值了,应该就可以达到你的目的了。 |
|
n****t 发帖数: 27 | 5 char *testvar;
void myfunction(char fname[])
{
char *temp;
temp = testvar;
temp = "a";
}
我想实现的是在这个函数里给temp赋一个值,然后传到testvar(定义在函数之外)。但
是我发现在这个函数里我改变不了testvar的值。有人遇到个这种问题吗?谢谢。 |
|
n********6 发帖数: 1511 | 6 objective:
SELECT * FROM TABLE1
WHERE @COLUMEVariable = 'xyz'
(SQL SERVER 2005)
请问:以下dynamic sql哪里出错了?有没有其他办法?谢谢。
Declare @testvar varchar(50)
Declare @testval varchar(50);
Set @testvar = Col1;
Set @testval = 'on';
SELECT * FROM ...
WHERE @testvar is not null
and @testvar =
CASE UPPER(@testval)
WHEN 'ON' THEN 'on'
END |
|
r******o 发帖数: 81 | 7 其实我就是想在一个data step中创建一个macro variable: testvar,但是还需要紧接
着就可以用这个macro variable来创建一个新变量:a2。
我知道call symput创建的macro var必须先把当前data step关闭才可以调用,请问还
有别的办法可以完成我的这个编程想法吗?
谢谢大家了!!
data test1;
input a b c;
cards;
1 1 1
;
run;
data test2;
set test1;
do i = 1 to 2;
a1 = i;
call symput('testvar',a1);
%put &testvar.;
a2 = &testvar.; *ALL I want is to get a2 = 1 for the first record and 2 for
the second record in a dynamic way;
output;
end;
run |
|
l********a 发帖数: 1154 | 8 传入外部变量指针即可
char *testvar;
void myfunction(char *gVar)
{
char *temp;
temp = "a";
gVar = temp;
}
调用
myfunction(testvar); |
|
d*******y 发帖数: 349 | 9 这是我做的test。
test1
1|2|3
2|3|4
3|2|5
test2
1|a|f
2|b|g
join test1 and test2 using regular left outer join.
join -t"|" -a1 test1 test2 > test3
now, process test3
awk -F"|" 'BEGIN{for(i=1;i<=2;i++) testvar=testvar"|0"}NF<5 {print $0testvar;
next}{print $0}' test3 > test4
注意事项:
1.我的例子用的是pipe做为delimiter,习惯.
2.希望for loop要多长看你的两个文件column 差多少。
试试吧。不过几万列,不知道你的awk版本给不给力。如果不行试试gawk。 |
|
w*****1 发帖数: 473 | 10 如果我还是用space delimiter,就是要改成:
join -t" " -a1 test1 test2 > test3
awk -F" " 'BEGIN{for(i=1;i<=2;i++) testvar=testvar"|0"}NF<5 {print $
0testvar;
next}{print $0}' test3 > test4
是吗?谢谢! |
|
w*****1 发帖数: 473 | 11 testvar=testvar"|0"}
如果是用space delimiter的话,0前面的|是不是要去掉 |
|
|
w*****1 发帖数: 473 | 13 我用了这个命令,结果所有加上去的0都和第一个文件的最后一列粘在一起,看了一下
列数,产生后的gpt4.txt需要补0的行还是只有5列。
awk 'BEGIN{for(i=1;i<=1636908;i++) testvar=testvar"0"}NF<1636913 {print $
0testvar;next}{print $0}' gpt2.txt > gpt4.txt |
|
i*e 发帖数: 352 | 14 如果你分隔符是空格,testvar=testvar"0" 0前面要加一个空格 |
|
C***U 发帖数: 2406 | 15 我看着他写的 怎么觉得像是要改变testvar所指的变量的值呢? |
|
l*******G 发帖数: 1191 | 16 testvar is dynamic, did you allocate memory? |
|