awk中的比较

awk中的比较,awk,Awk,以下awk代码按预期工作。 我想检查第二个字段$2是否为0,并使用“setex”命令而不是默认的“hincrby” 上面的代码将输出如下 hincrby r:565:14718 2012-03-10~12:55:00 1\r\n zadd RequestSet 20120310 r:565:14718\r\n 如果creativeid为0,则预期会有以下输出: hincrby r:565:0 2012-03-10~12:55:00 1\r\n zadd RequestSet 20120310

以下awk代码按预期工作。 我想检查第二个字段$2是否为0,并使用“setex”命令而不是默认的“hincrby”

上面的代码将输出如下

hincrby r:565:14718 2012-03-10~12:55:00 1\r\n zadd RequestSet 20120310 r:565:14718\r\n 
如果creativeid为0,则预期会有以下输出:

hincrby r:565:0 2012-03-10~12:55:00 1\r\n zadd RequestSet 20120310 r:565:14718\r\n hincrby r:565:14718 nods 1\r\n
对于所有其他creativeID($2),我需要生成另一个带有完整日期的语句($7)

换句话说,我试图将以下PHP逻辑编写到awk

    if($creativeid !=0 ){            
        $pipe->setex($cb.':r','172800',$datetime); 
    }else{
        $pipe->hincrby("r:".$zone.":".$creativeid,'nods',1);  
    }
更新:

以下if-then-else代码似乎不起作用:

if $2 = 0 
printf "hincrby r:%s:%s %s:%02d:00 1\\r\\n\n zadd RequestSet %s r:%s:%s\\r\\n\n hincrby r:%s:%s nods 1\r\n", $1, $2, a[1], a[2], b[1], $1, $2, $1, $2;
else
printf "hincrby r:%s:%s %s:%02d:00 1\\r\\n\n zadd RequestSet %s r:%s:%s\\r\\n\n setex %s:r 172800 %s", $1, $2, a[1], a[2], b[1], $1, $2, $5, $7;
如果($2=0)解决了问题。谢谢你的提示

cmd = (a[2] == 0) ? "hincrby" : "setx"
print cmd    

# or 

if( a[2] == 0 ) print "hincrby"
else print "setx"   
a[2]=0
将始终为真。这只是一项作业…
a[2]=“anything”
将为真,除非它是无效值


请注意,
if(a[2]=0)
确实会更改
a[2]
..

的值,就像在大多数语言中一样,它在awk中也被称为
if
。你有什么问题吗?没有。。您正在将0分配给数据的第二个字段。要测试它是否等于零,需要使用
if$(2==0).
。注意2个“=”符号。祝你好运
if $2 = 0 
printf "hincrby r:%s:%s %s:%02d:00 1\\r\\n\n zadd RequestSet %s r:%s:%s\\r\\n\n hincrby r:%s:%s nods 1\r\n", $1, $2, a[1], a[2], b[1], $1, $2, $1, $2;
else
printf "hincrby r:%s:%s %s:%02d:00 1\\r\\n\n zadd RequestSet %s r:%s:%s\\r\\n\n setex %s:r 172800 %s", $1, $2, a[1], a[2], b[1], $1, $2, $5, $7;
cmd = (a[2] == 0) ? "hincrby" : "setx"
print cmd    

# or 

if( a[2] == 0 ) print "hincrby"
else print "setx"