awk

手段のために目的を忘れたと揶揄された件の続きみたいな話だが、またしても同じような作業が必要になった。やはり xml ファイルを切りだして、excel (calc) に変換するという作業だ。

<?xml version="1.0" encoding="utf-8" ?>
  <MonitorLog>
    <Categories>
      <Category name=".NET CLR Data" help=".Net CLR データです。">
        <Objects>
          <Object name="SqlClient: Current # pooled and nonpooled connections" help="接続 (プールされているかどうかは不問) の現在の数です。"/>
          <Object name="SqlClient: Current # pooled connections" help="プロセスに関連付けられているすべてのプールに現在含まれる接続の現在の数です。"/>
            <Object name="SqlClient: Current # connection pools" help="プロセスに関連付けられているプールの現在の数です。"/>
            <Object name="SqlClient: Peak # pooled connections" help="全プールをとおし、プロセスの開始以降の接続の数です。"/>
            <Object name="SqlClient: Total # failed connects" help="接続を試みようとしたものの、何らかの理由で失敗した接続の合計数です。"/>
            <Object name="SqlClient: Total # failed commands" help="実行を試みたものの、何らかの理由で失敗したコマンドの合計数です。"/>
          </Objects>
        <Instances/>
      </Category>
      <Category name=".NET CLR Exceptions" help="CLR 例外処理のランタイム統計です。">
        <Objects>

途中で目的を忘れてしまった前回と同じやり方だと、grep で Category と Object の含まれる行だけを抜き出し、sed で 不要な部分を置換して、テキストエディタで若干の整形処理を行ってから calc に読み込む…ということをしたのだが、途中で気づいた awk 一発ぢゃん!をやってみることにした。

awk -F ” {print $2 “t” $4;} filename.xml > filename.csv

不要な行の削除処理はしていないが、ホントに一発だった。なんてこった。