![awk: 강제 반환 상태인가요?](https://linux55.com/image/2866/awk%3A%20%EA%B0%95%EC%A0%9C%20%EB%B0%98%ED%99%98%20%EC%83%81%ED%83%9C%EC%9D%B8%EA%B0%80%EC%9A%94%3F.png)
이건 내 후속작이야이전 질문.
나는 /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"로 강제 종료하고 일치하는 모든 행을 인쇄할 수 있나요?
답변1
상태를 변수에 저장하고 END
블록에서 사용합니다.
awk -F: 'NF != 7 {print; err = 1}
END {exit err}' /etc/passwd
답변2
나는 일치하는 항목이 없으면 1로 종료되는 Grep과 유사한 것을 찾고 있었습니다. 이것은 Awk와 동일합니다.
#!/usr/bin/awk -f
BEGIN {
b1 = 1
}
index($0, "sunday") > 0 {
b1 = 0
print
}
END {
exit b1
}
답변3
이것은 OP의 정확한 요청에 응답하지 않지만, 만약 당신이오직반환 코드에 관심을 갖고아니요이와 같은 일치하는 줄을 인쇄해야 하는 경우 grep -q
첫 번째 일치 후 종료되도록 @geekasaur의 답변을 수정할 수 있습니다. 대규모 입력 파일의 경우 파일 초기에 오류가 발생하면 시간이 절약됩니다. /etc/passwd
자격을 갖추지 않기를 바랍니다 !
awk -F: 'NF != 7 {err = 1; exit;}
END {exit err}' /etc/passwd