일치하는 조건 후에 다음을 인쇄하시겠습니까?

일치하는 조건 후에 다음을 인쇄하시겠습니까?

명령을 사용할 때: awk 'f&&!--f;{if(length($1)>8){f=1}}' awk.write줄을 일치시킨 후 줄을 인쇄할 수 있습니다.

사용법은 알지만 실제로는 어떤 기능을 하는지 flags모르시나요 ?&&!--f

this line 1 no un1x
this lines 22 0
butbutbut this 33 22 has unix
but not 1
THIS is not
butbutbut ffff
second line

답변1

한 번 보자 f&&!--f. 여기서 기본 작업(행 인쇄)을 수행하려면 조건 f과 조건이 모두 True로 평가되어야 합니다. 논리적이다 .!--f&&AND

awk의 평가가 가 아닌 경우 이 문은 참입니다 0. 따라서 f그렇지 않은 경우 첫 번째 조건은 true 입니다 0.

!--f즉시 감소한다는 의미입니다 f( 1또한 f--1씩 감소하지만 조금 후에만 감소합니다. 참조).이 문서더 알아보기). 그리고 !이전 진술의 진리값을 부정합니다. 따라서 f이면 1, 일명 False --f가 됩니다 0. 이것이 !사실이 됩니다. 이것은 if가 f같지 않은 상황을 포착해야 합니다 1.

이 간단한 예에서 두 번째 테스트는 꼭 필요한 것은 아니지만 f재설정이 이루어졌는지 확인합니다 0. 더 짧은 버전은 다음과 같습니다.

awk 'f&&!--f;length($1)>8{f=1}' awk.write

아마도 이해하기 더 쉬울 것입니다.

awk 'f&&{print;f=0};length($1)>8{f=1}' awk.write

관련 정보