我有以下几点:
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发布于 2018-11-11 13:16:40
按原样输入文件,下面这样简单的awk命令就足够了。
awk '/sar/{ time=$1" "$2; next }/Average/{ print time"|"$5 }' file发布于 2018-11-11 14:48:09
有几个选择:
awk $ awk '/COMMAND/{printf "%s %s",$1,$2}/平均/打印“$5}”文件2018-11-10 23:57:21 1984 2018-11-10 23:58:21连体84perl $ perl -ale '$k="$F $F“if /COMMAND/;打印"$k|$F”if /Average/‘file 2018-11-10 23:57:21 1984 2018-11-10 23:58:21连体84发布于 2018-11-11 13:15:21
这个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";}'(我把它写成了两行,所以它更易读。)不过,您需要给它输入输入。文件名在末尾,在开头或结尾,或者管道就行了。其运作方式如下:
在开始的时候读一行日期和时间,并记住它。一开始和一次使用Average的行,打印记住的日期和时间加上|符号和从第五列取的平均值,假设空格列分离。第1点:重复。https://unix.stackexchange.com/questions/481082
复制相似问题