以下awk代码按预期工作。 我想检查第二个字段$ 2是否为0并使用“setex”命令而不是默认的“hincrby”。
BEGIN {
# all fields are separated by ^
FS = "^";
}
{
# $7 is the date and time in the form yyyy-mm-dd hh:mm:ss.
# Split at colons to get hours minutes and seconds into a[1]
# through a[3]. Round minutes to nearest 5.
split($7, a, ":");
split(gensub(/-/,"","g",$7),b,"~");
a[2] = int(a[2]);
printf "hincrby r:%s:%s %s:%02d:00 1\\r\\n\n zadd RequestSet %s r:%s:%s\\r\\n\n ", $1, $2, a[1], a[2], b[1], $1, $2;
}
上面的代码会像这样输出......
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
对于所有其他创意($ 2),我需要另一个使用完整日期($ 7)生成的语句
hincrby r:565:14718 2012-03-10~12:55:00 1\r\n zadd RequestSet 20120310 r:565:14718\r\n setex xyzabc:r 172800 2012-03-10~12:59:49\r\n
换句话说,我正在尝试将以下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;
答案 0 :(得分:2)
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]
...
答案 1 :(得分:0)
如果($ 2 = 0)解决了问题。谢谢你的提示。