이것은 이전의 질문에 대한 후속 조치 입니다.
이 편리한 코드 조각을 사용하여 / etc / passwd의 필드 수를 확인하고 있습니다. 다음 예에서 사용자 ‘fieldcount1’및 ‘fieldcount2’의 필드 수가 잘못되었습니다.
$ awk -F: ' NF!=7 {print}' /etc/passwd
fieldcount1:x:1000:100:fieldcount1:/home/fieldcount1:/bin/bash::::
fieldcount2:blah::blah:1002:100:fieldcount2:/home/fieldcount2:/bin/bash:
$ echo $?
0
알다시피, awk는 0의 리턴 상태로 종료됩니다. 그 관점에서, 여기에는 문제가 없습니다.
이 awk 문을 쉘 스크립트에 통합하고 싶습니다. 오류가있는 모든 줄을 인쇄하고 반환 코드를 1 (오류)로 설정하고 싶습니다.
특정 종료 상태를 강제로 시도 할 수 있지만 awk는 한 줄만 인쇄합니다.
$ awk -F: ' NF!=7 {print ; exit 1}' /etc/passwd
fieldcount1:x:1000:100:fieldcount1:/home/fieldcount1:/bin/bash::::
$ echo $?
1
awk를 반환 상태 ‘1’로 강제 종료하고 일치하는 모든 줄을 인쇄 할 수 있습니까?
답변
상태를 변수로 유지하고 END
블록 에서 사용하십시오 .
awk -F: 'NF != 7 {print; err = 1}
END {exit err}' /etc/passwd
답변
일치하는 것을 찾지 못하면 Grep과 비슷한 것을 찾고 있었는데 1을 종료합니다. 다음은 Awk와 동일합니다.
#!/usr/bin/awk -f
BEGIN {
b1 = 1
}
index($0, "sunday") > 0 {
b1 = 0
print
}
END {
exit b1
}
답변
이는 영업 이익의 정확한 요구 사항에 응답하지 않지만,이 경우 에만 반환 코드에 대해 걱정하고 있지 필요 유사 일치, 그 선 인쇄 grep -q
, 첫 번째 경기 후, 당신은 출구에 @geekasaur 답을 수정할 수를 거대한 입력하는 파일에서 오류가 일찍 발생하면 파일이 시간을 절약합니다. 바라건대 /etc/passwd
당신을 위해 자격이되지 않습니다!
awk -F: 'NF != 7 {err = 1; exit;}
END {exit err}' /etc/passwd