2016-08-30 3 views
-2

을 충족하는지 여부를 결정.파일의 모든 행에 지정된 열이의 내가 아래 내용을 가진 파일이 있다고 가정 해 봅시다 기준

ok  yes bad 
ok  yes good 
ok  yes bad 
ok  yes good 
ok  yes bad 
ok  yes good 

나는 전체 3 열을 검색 할 수있는 쉘 스크립트 나 AWK 프로그램을 작성해야하고, 전체 열이 좋은 경우 다음 "모든게 좋아 보인다"로 인쇄하고 나쁜 사람을 발견하면 넣다 다음 것들 "로 인쇄

+4

를 시도? – John1024

답변

2

간단한 AWK 한 줄의 상태와 함께 할 "괜찮되지 않습니다

awk 'BEGIN {ok=1;} $3=="bad" { ok=0 } END { if (ok==0) {print "Things are not okay"} else { print "Everything looks good"} }' yourfile 

BEGIN 블록 ok 파일을 구문 분석이 시작되기 전에 1 초기화합니다. 기본값 : 불량이 발견되지 않으면 모두 ok입니다. $3 직접 우리가 필요로하는 세 번째 필드 :

파일 자연 공간/탭 분리, AWK 필드 분리를 조정할 필요가 없습니다 있습니다. 어떤 곳에서 bad을 충족하는지 테스트하고, 그렇다면 ok 플래그를 취소하십시오.

END 블록은 파일의 단부에 실행된다. ok을 확인하고 관련 메시지를 인쇄하십시오.

+0

의도는 전체 파일을 검사하는 것입니다. 플래그를 설정하고 END 블록에 인쇄하려고합니다. –

+0

@jean :하지만 여러 번 인쇄 중입니다. 내가 원하는 전체 열을 검색 할 awk가 및 전체 열은 다음 값 "좋은"을 가지고 있다면이 경우에 여러 번 인쇄, 하나만 시간을 인쇄 할 수 있습니다. – suru1432002

+0

@ suru1432002, 편집 내용을 기록하십시오. –

0
$ awk '$3=="bad"{f=1; exit} END{print (f ? "Things are not OK" : "Everything looks good")}' file 
Things are not OK 

위의 세트 플래그 및 exist의 주요 작업 루프 (참고 : exit 그래서 다음은 END 섹션으로 이동, 프로그램, 입력을 읽는 그냥 암시 루프를 종료하지 않음) 그것은 가능한 한 효율적 다음 END 섹션에서 그 플래그가 설정 여부되는에 따라 관련 메시지를 인쇄 할 삼원 식을 사용하므로 처음은 "나쁜"발견한다.

평생 동안 텍스트 조작을한다면, Arnold Robbins의 Effective Awk Programming, 4th Edition의 책을 읽고 간결하고, 효율적이며, 강력하고 이식 가능한 방법을 배우십시오.

0

당신은 할 수 있습니다 : 당신은 지금까지 무엇을

awk '$3=="bad"{bad++} END { if (bad>0) print bad " bads found"; else print "all goods!"}' file