現用のNetAppの状況確認をするために「perfstatデータ収集ツール」というのが配布されている。
rsh/sshで対象のNetAppにログインして、いろんなコマンドを実行して、1つのテキストファイルとして出力をする。
この「1つのテキストファイル」というのがくせ者で、200MBぐらいのファイルができたりする。
これだとエディタで取り扱いづらいので細かく分割することにした。
中をみてみると「=-=-=-=-=-= CONFIG IPアドレス PRESTATS =-=-=-=-=-= aggr status -v」という感じで「 =-=-=-=-=-= 」区切りでファイルが出力されている。
それを元にファイルを分割したのが下記スクリプト。
$inputfile="x:\tmp\source\perfstat7_20191122_1400.txt" $outdir="x:\tmp\output" $filename="" Get-Content $inputfile -Encoding UTF8 | ForEach-Object { $line=$_ if( $line.Contains("=-=-=-=-=-=") ){ $filename=$line $filename=$filename.Replace("=-=-=-=-=-= ","") $filename=$filename.Replace("/","-") $filename=$filename.Replace(":","") $filename=$outdir+"\"+$filename+".txt" New-Item $filename } if($filename -ne ""){ $line | Add-Content $filename } }
今回は1回しか実行しないので速度を気にする必要がないので簡単さを優先している。
もし、出力速度を気にするのであれば1行毎にAdd-Contentするのは非常に効率が悪いので工夫が必要となる。
参考例:「PowerShellで巨大なファイルをGet-Contentし、Export-Csvするのを省メモリで行う」