2012-03-18 2 views
1

다음 awk 코드가 예상대로 작동합니다. 두 번째 필드 $ 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 $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항상 사실 일 것입니다. 그것은 단지 할당 일뿐입니다 ...
a[2]="anything"은 잘못된 값이 아니라면 참입니다.

if(a[2]=0) 변화 a[2]의 값을한다는 것을

주 ... 대부분의 언어로

0

if ($ 2 = 0)가 문제를 해결했습니다. 힌트를 가져 주셔서 감사합니다.

+1

아니요. 데이터의 두 번째 입력란에 0을 지정하고 있습니다. 그것이 0인지 테스트하려면,'$ (2 == 0) ... '을 사용해야합니다. 2 '='표시에주의하십시오. 행운을 빕니다. – shellter