awk의 조건과 일치하는 두 패턴 사이에 줄을 인쇄합니다.

awk의 조건과 일치하는 두 패턴 사이에 줄을 인쇄합니다.

특정 조건을 충족하는 두 패턴 사이에 선을 인쇄하는 방법은 무엇입니까?

예를 들어 입력 파일의 경우부분적으로다음 콘텐츠가 포함되어 있습니다:

Time         %MEM    %CPU    %SWAP
00:05:02      7.3     8.4     3.5
00:10:02      10      4.3     4.5
00:15:02      8.5     4.4     6.7
00:20:02      25.3    35.8    7.3
00:25:02      74.6    28.4    7.3
00:30:02      67.2    88.3    7.3
00:35:02      35.4    87.4    7.3
00:40:02      27.3    92.8    7.3
00:45:02      45.3    83.2    10.5
00:50:02      30      65.7    10.5
01:00:02      92.3    66.4    10.5
01:05:02      13.1    69.4    13.5
01:10:02      45.2    77.4    13.5
01:15:02      48.7    78.8    13.5
01:20:02      49.1    80.5    13.5
01:25:02      72      83.9    13.5
END

처음으로 스왑 값을 인쇄하고 7보다 큰 모든 스왑 값을 인쇄하고 싶습니다. 그래서 내 출력은 다음과 같습니다

00:20:02   7.3
00:45:02   10.5
01:05:02   13.5

나는 시도했다:

awk '/%SWAP/{flag=1;next}/End/{flag=0}flag' myFile

모든 줄을 인쇄합니다. 나는 또한 다음을 시도했습니다.

awk '/%SWAP/ {flag=1;next}
     /End/{flag=0}
     {if ($10 > max) {max=$10; print $1 " " $2 " " $4}}' myFile

그러나 이것은 나에게 파일의 이전 부분의 출력을 제공합니다 $4.

누구든지 해결책이 있습니까? 어떤 설명이라도 대단히 감사하겠습니다.

답변1

당신은 말할 수 있습니다 :

$ awk '($4>7 && $4!=swap) {swap=$4; print $1, $4}' file
00:20:02 7.3
00:45:02 10.5
01:05:02 13.5

즉, SWAP보다 큰 마지막 값을 변수 7에 저장하고 해당 값을 계속 비교합니다.swap

-v OFS="\t"출력 필드 구분 기호를 tab: 또는 로 설정하면 더 나은 출력을 얻을 수 있습니다 BEGIN {OFS="\t"}. 또는 로 파이프할 수 있습니다 column -t.

관련 정보