2014-09-05 6 views
1

좋아,이 질문은 아마도 당신에게 어리석은 질문처럼 들리 겠지만, 제대로 작동하지 못하고 읽고 읽은 후에도 내가 뭘 잘못했는지 정말로 알지 못한다. 꽤 많은 nawk/AWK 도움 사이트 :"else else else else"가 작동하지 않는다면

$ echo -e "hey\nthis\nworld" | nawk '{ if ($1 !~ /e/) { print $0; } else if ($1 !~ /o/) { print $0; } else { print "condition not mached"; } }' 
    hey 
    this 
    world 
    $ 

나는뿐만 아니라 다양한 예에서 볼 수 있듯이 여러 행에 노력 한 줄에 그것을 가지고 선호하는 것 : 도움을 사전에

$ echo -e "hey\nthis\nworld" | nawk '{ 
    if ($1 !~ /e/) 
    print $0; 
    else if ($1 !~ /o/) 
    print $0; 
    else 
    print "condition not matched" 
    }' 
    hey 
    this 
    world 
    $ 

감사합니다 초보자!

단순히 "e"또는 "o"라는 특정 패턴을 포함하지 않는 인쇄 된 선만 갖고 싶을뿐입니다. 마지막으로 테스트 목적으로 만 추가했습니다.

당신은 단순히 수행하여 더 쉽게 당신의 인생을 만들 수 있습니다

답변

0

:

echo "hey\nthis\nworld" | nawk '$1 !~ /e|o/' 

무엇 귀하의 경우 잘못된 것입니다 것은 :

$ echo -e "hey\nthis\nworld" | nawk '{ 
if ($1 !~ /e/) #'this' and 'world' satisfy this condition and so are printed 
print $0; 
else if ($1 !~ /o/) #Only 'hey' falls through to this test and passes and prints 
print $0; 
else 
print "condition not matched" 
}' 
hey 
this 
world 
$ 
+0

감사합니다. if-construct에 대한 오해가 있습니다. – hermann

0

FWIW이 작업을 수행하는 올바른 방법은 문자입니다

awk '{ print ($1 ~ /[eo]/ ? $0 : "condition not matched") }' 

당신이와 함께 귀하의 질문에 태그를하면 앞으로 : 삼항 표현 내부 목록대신에 단지 nawk (이전의 POSIX가 아니며 상대적으로 중복 된 awk 변형입니다)보다 많은 잠재 고객에게 다가 갈 수 있습니다.