Available
아래 코드를 사용하여 일치하는 항목이 있으면 인쇄하려고 합니다. nil
grep -o 'pattern' test.log | awk '{if($0=="pattern") print "Available"; else print "nil"}'
그 if
부분은 잘 작동하지만 else
grep이 비어 있으면 해당 부분을 얻을 수 없습니다.
답변1
패턴이 일치하지 않으면 grep
출력이 생성되지 않으며 awk
프로그램에서 사용할 데이터가 없습니다. 그렇기 때문에 코드 nil
에서 결코 awk
얻을 수 없습니다.
또 다른 방법은
if grep -q 'pattern' test.log; then
echo 'Available'
else
echo 'nil'
fi
옵션 은 유틸리티가 출력을 생성하는 것을 중지하는 -q
데 사용됩니다 grep
(진단 출력 제외). 여기서는 출력이 필요하지 않고 grep
종료 상태만 필요합니다.
를 사용하면 awk
원하는 경우 계속 테스트할 수 있지만 조건에 따라 블록에 문자열을 출력 해야 합니다 nil
.END
grep -o 'pattern' test.log |
awk '/pattern/ { print "Available"; found = 1 }
END { if (!found) print "nil" }'
END
이 블록은 스크립트에 입력이 없더라도 awk
실행됩니다 .
실제로 다음을 사용하여 모든 작업을 수행할 수 있습니다 awk
.
awk '/pattern/ { print "Available"; found = 1; exit }
END { if (!found) print "nil" }' test.log
호출은 블록 exit
을 호출하므로 변수 END
를 삭제할 수 없습니다 found
.