Indo pelo seu arquivo de entrada no estado em que se encontra, um simples comando awk
tão simples como o abaixo deve ser suficiente.
awk '/sar/{ time=$1" "$2; next }/Average/{ print time"|"$5 }' file
Eu tenho o seguinte:
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
Preciso de tempo com o valor médio de %idle
:
2018-11-10 23:57:21|84
2018-11-10 23:58:21|84
Algumas escolhas:
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
Esse tal de uma linha do Perl deve fazer o seguinte:
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";}'
(Eu fiz duas linhas, por isso é mais legível.) Você precisa alimentá-lo com a entrada embora. O nome do arquivo no final, ou <file_name
no começo ou no final, ou um pipe será suficiente. Os trabalhos são estes:
Average
no início e, uma vez lá, imprima a data e a hora memorizadas mais o sinal |
e a média obtida da quinta coluna, assumindo a separação da coluna em branco. Tags text-processing perl awk sed