VBスクリプトです。
使い方は以下の様な感じで。
コマンドラインから実行します。
出力結果があるフォルダに、「Result.csv」というファイル名で加工した結果を出力します。
cscript このスクリプトのファイル名.vbs "TOPコマンドの出力結果があるフォルダの絶対パス"
加工した結果はこんな感じになります。
CSV形式で、左から時間、プロセスの所有者、プロセス状態、CPU使用率(%)、プロセス名です。
"07:40:02","root","S",53.0,"gzip"
"07:40:02","root","D", 5.1,"tar"
"07:40:02","root","S", 1.7,"pdflush"
___________________________________
Option Explicit
Dim objFileSystem
Dim objResultFile
Dim strPathName
Dim strLineData
Dim strTime, strUserName, strProcessState, strCPU, strProcessName
Dim dblTotal
Dim intHeaderFlag
Const IN_FILE_NAME = "TOPコマンドの出力結果(ファイル名)"
Const ForReading = 1, ForWriting = 2, ForAppending = 8
'結果ファイルのフォルダ情報をコマンドライン引数から得る
strPathName = WScript.Arguments(0)
'FileSystemObjectの作成
Set objFileSystem = WScript.CreateObject("Scripting.FileSystemObject")
'入力ファイルを開く
Set objResultFile = objFileSystem.OpenTextFile(strPathName & "\" & IN_FILE_NAME, ForReading)
dblTotal = 0
'ファイルの最後まで読み込みを続ける
Do Until objResultFile.AtEndOfStream
strLineData = objResultFile.ReadLine
'時刻を取得する
If InStr(strLineData,"top - ") > 0 then
strTime = Mid(strLineData, 7, 8)
End If
'Header情報が見つかったら、データ解析のモードになる
If intHeaderFlag = 0 Then
'データ解析モードでなければここ
If InStr(strLineData,"PID") > 0 then
intHeaderFlag = 1
End If
Else
'データ解析モードならこっち
If Len(strLineData) > 0 Then
'CPU使用率が0%以上なら解析する。
If CDbl(Mid(strLineData, 42, 4)) > 0 Then
strUserName = Trim(Mid(strLineData, 7, 10))
strProcessState = Mid(strLineData, 40, 1)
strCPU = Mid(strLineData, 42, 4)
strProcessName = Trim(Mid(strLineData, 62, 19))
dblTotal = dblTotal + CDbl(strCPU)
'結果ファイルへ書き込み
Call WriteResultData
End If
Else
intHeaderFlag = 0
strCPU = CStr(dblTotal)
strProcessName = "Total"
Call WriteResultData
dblTotal = 0
End If
End if
Loop
objResultFile.Close
Set objResultFile = Nothing
Set objFileSystem = Nothing
'結果ファイルへ書き込む
Sub WriteResultData()
Dim objWriteFile
'追記モードでオープン
Set objWriteFile = objFileSystem.OpenTextFile(strPathName & "\" & "Result.csv", ForAppending, True)
objWriteFile.WriteLine Chr(34) & strTime & Chr(34) & "," & _
Chr(34) & strUserName & Chr(34) & "," & _
Chr(34) & strProcessState & Chr(34) & "," & _
strCPU & "," & Chr(34) & strProcessName & Chr(34)
objWriteFile.Close
Set objWriteFile = Nothing
End Sub
0 件のコメント:
コメントを投稿