私は以下を持っています:
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
次の1行の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";}'
(読みやすさを高めるために2行で書きました。)ただし、入力をしてください。ファイル名は終了、<file_name
開始、終了、またはパイプにあります。仕組みは次のとおりです。
- 最初に日付と時刻のある行を見つけて覚えてください。
- 次の行に移動
Average
して、記憶された日付と時刻のプラス記号|
と空の列区切り記号を想定して、5番目の列から取得した平均を印刷します。 - ポイント1を繰り返します。