2012-03-18 5 views
1

次の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; 
+1

を行うこと

注意、それはあまりにものawkに 'if'と呼ばれています。あなたの問題は何ですか? –

答えて

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

# or 

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

a[2]=0常に trueになります。それは単なる割り当てです...
a[2]="anything"は、それが無効な値でない限り真です。 if(a[2]=0)は、ほとんどの言語のように変更a[2]の値...

0

if($ 2 = 0)が問題を解決しました。ヒントをありがとう。

+1

いいえ。データの2番目のフィールドに0を割り当てています。ゼロに等しいかどうかをテストするには、if $(2 == 0)...を使用する必要があります。 2 '=記号に注意してください。がんばろう。 – shellter

関連する問題