명령을 사용할 때: 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