2013-04-18 2 views
0

내가해야 [8|9] (다음 awk 스크립트 예제의 의미는 무엇입니까?

BEGIN { print "*** WARNING WARNING WARNING ***" } 

/\<[8|9][0-9]%/ { print "Partition " $6 "\t: " $5 " full!" } 

END { print "*** Give money for new disks URGENTLY! ***" } 

내가 다음

/\<[8|9][0-9]%/ 
+0

이 스크립트는 실제로 올바르지 않습니다. 디스크가 100 % 가득 차 있다면 어떻게됩니까? 그것은 일치하지 않습니다. 어느 것이 예상 된 작업이 아닌 것 같습니다. 돈이 더 요구되는 것은 라인 일치가없는 것입니다. 어느 쪽이 좋은 행동이 아닌지 ... :) – TrueY

답변

1

그것은 8, | 또는 9 다음 \<을 단어-시작 일치하는 정규 표현식이다 제외하고, 그것의 대부분의 이해 예를 가지고 아마 [89] 일 것임), 뒤에 %이 오는 숫자 ([0-9]). 이 < 99 %에 < 80 % 일치하는 경우

-1

, 다음 메시지 파티션 ###

+2

'\ <'는 단어 시작이 litteral이 아닌'<'와 일치합니다. – Thor

+0

Aaargh. 죄송합니다. 당신 말이 맞습니다. –

+0

@ 토르 : 어떤 정규 표현식? awk는 ERE를 사용하고'\ <'는 단어 시작이 아닙니다. 그것은'^'입니다. 아하! 나는 [man gawk] (http://www.gnu.org/software/gawk/manual/gawk.html#GNU-Regexp-Operators)를 읽었으며 정말로 거기에는 gawk 특정 확장자가있다! – TrueY

1

전체 모든 입력 파일을 읽고 바로 리터럴 문자열 *** WARNING WARNING WARNING ***를 인쇄되기 전에 BEGIN 블록이 한 번 실행을 보여줍니다. 마찬가지로 END 블록은 모든 입력 파일을 읽고 나서 리터 문자열 *** Give money for new disks URGENTLY! ***을 인쇄 한 후에 한 번만 실행됩니다. 앞의 조건에 대해 true를 평가하는 모든 행에 대해 다른 모든 블록이 실행됩니다. 선이 범위의 아무 곳이나 포함

\< # Word Start 
[8|9] # Either an 8 or | or 9 (think this should be [89]) 
[0-9] # A digit 
%  # literal percent character 

기본적으로 경우에 그 정규 표현식이 일치 다음과 같은 뜻합니다 80% - 99% : 정규 표현식은 다음과 같은 의미 어디에

BEGIN { 
    print "*** WARNING WARNING WARNING ***" 
}  
/\<[8|9][0-9]%/{        
    print "Partition",$6,"\t:",$5,"full!" 
}  
END { 
    print "*** Give money for new disks URGENTLY! ***" 
} 

조건 /\<[8|9][0-9]%/은 전체 라인에 대한 정규 표현식 일치 문자열 Partition 다음에 현재 행의 여섯 번째 필드 다음에 TAB 다음에 :이 붙은 다음 현재 행의 다섯 번째 필드와 마지막으로 full 문자열이 인쇄됩니다. awk의 기본 필드 구분 기호는 공백입니다.

+0

좋아, 알았다! 나는 그것을 조금 분석하고 싶었다. 어쩌면 잘못된 곳에서 .. 죄송합니다. – TrueY

관련 문제