次のawkコードは期待通りに動作しています。 2番目のフィールド$ 2が0で、デフォルトの "hincrby"の代わりに "setex"コマンドを使用しているかどうか確認したいと思います。 awkでの比較
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の場合:他のすべてのcreativeids($ 2)については
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
、私は完全な日付($ 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
で生成された別のステートメントを必要とします言い換えれば
は、私はawkにするには、以下のPHPロジックを記述しようとしています
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;
を行うこと
注意、それはあまりにものawkに 'if'と呼ばれています。あなたの問題は何ですか? –