Сравнения в awk - PullRequest
       14

Сравнения в awk

1 голос
/ 18 марта 2012

Следующий код 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;

Ответы [ 2 ]

2 голосов
/ 18 марта 2012
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] ...

0 голосов
/ 18 марта 2012

, если ($ 2 = 0) решил проблему. Спасибо за подсказку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...