iostat の出力結果を特定の列でソートする Perl ワンライナー

% perl -lane '/^sdk/ and push(@tmp,[@F]);END{map{print join(qq/ /,@{$_})}sort{$a->[11]<=>$b->[11]}@tmp}' iostat.log

この例では、デバイスを sdk だけに絞って、%util(11列目) でソートしています。


動的に二次元配列を作る方法は以下を参考にしました。

プログラミングPerl〈VOLUME1〉

プログラミングPerl〈VOLUME1〉

P.313
9.1.2 自分自身で作ってみる

while (<>) {
    @tmp = split;
    push @AoA, [ @tmp ];
}


素直に grep と sort 使ったほうが楽ですねw

% grep sdk iostat.log|sort -k 12