특정 조건을 충족하는 두 패턴 사이에 선을 인쇄하는 방법은 무엇입니까?
예를 들어 입력 파일의 경우부분적으로다음 콘텐츠가 포함되어 있습니다:
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
.