나는 다음을 가지고 있습니다 :
2018-11-10 23:57:21 [COMMAND]: sar -u 10 5
AIX host 1 7 11/10/18
System configuration: lcpu=64 mode=Capped
23:57:21 %usr %sys %wio %idle physc
23:57:31 10 7 0 83 16.00
23:57:41 9 6 0 85 16.00
23:57:51 9 6 0 85 16.00
23:58:01 9 7 0 84 16.00
23:58:11 10 6 0 84 16.00
Average 9 6 0 84 16.00
2018-11-10 23:58:21 [COMMAND]: sar -u 10 5
AIX host 1 7 11/10/18
System configuration: lcpu=64 mode=Capped
23:58:21 %usr %sys %wio %idle physc
23:58:31 10 8 0 82 15.99
23:58:41 9 6 0 85 16.00
23:58:51 9 6 0 85 16.00
23:59:01 9 6 0 84 16.00
23:59:11 10 6 0 83 16.00
Average 10 6 0 84 16.00
평균 시간을 구해야 합니다 %idle
.
2018-11-10 23:57:21|84
2018-11-10 23:58:21|84
답변1
입력 파일을 있는 그대로 보려면 awk
아래와 같은 간단한 명령으로 충분합니다.
awk '/sar/{ time=$1" "$2; next }/Average/{ print time"|"$5 }' file
답변2
몇 가지 옵션이 있습니다:
awk
$ awk '/COMMAND/{printf "%s %s", $1,$2}/Average/{print "|"$5}' file 2018-11-10 23:57:21|84 2018-11-10 23:58:21|84
perl
$ perl -ale '$k="$F[0] $F[1]" if /COMMAND/; print "$k|$F[4]" if /Average/' file 2018-11-10 23:57:21|84 2018-11-10 23:58:21|84
답변3
다음 한 줄의 Perl 코드가 트릭을 수행해야 합니다.
perl -lne'$d=$1 if /^(\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2})/;
if(/^Average\s+\S+\s+\S+\s+\S+\s+(\S+)/) {print "$d|$1";}'
(가독성을 높이기 위해 두 줄로 썼습니다.) 단, 입력을 해줘야 합니다. 파일 이름은 끝, <file_name
시작, 끝 또는 파이프에 있습니다. 작동 방식은 다음과 같습니다.
- 처음에 날짜와 시간이 있는 줄을 찾아 기억해 보세요.
- 다음 줄로 이동
Average
하여 기억된 날짜 및 시간 더하기 기호|
와 빈 열 구분 기호를 가정하여 다섯 번째 열에서 가져온 평균을 인쇄합니다. - 포인트 1을 반복합니다.