複数の文字列出力から xml データを動的に (データが変化して) 列形式に抽出しようとしています。
SQL データベースに対してクエリを実行すると、これらの XML ビットのうち約 100 個がエコーアウトされます。
<?xml version="1.0"?>
<Connection>
<ConnectionType>Putty</ConnectionType>
<CreatedBy>Someone</CreatedBy>
<CreationDateTime>2014-10-27T11:53:59.8993492-04:00</CreationDateTime>
<Events>
<OpenCommentPrompt>true</OpenCommentPrompt>
<WarnIfAlreadyOpened>true</WarnIfAlreadyOpened>
</Events>
<Group>Cloud Services Client Delivery\Willis\Linux\Test - SJC</Group>
<ID>77e96d52-f165-482f-8389-ffb95b9d8ccd</ID>
<KeyboardHook>InFullScreenMode</KeyboardHook>
<MetaInformation />
<Name>Hostname-H-A10D</Name>
<OpenEmbedded>true</OpenEmbedded>
<PinEmbeddedMode>False</PinEmbeddedMode>
<Putty>
<PortFowardingArray />
<Scripting />
<SessionHost>10.0.0.100</SessionHost>
<SessionName>10.0.0.100</SessionName>
<TelnetEncoding>IBM437</TelnetEncoding>
</Putty>
<ScreenColor>C24Bits</ScreenColor>
<SoundHook>DoNotPlay</SoundHook>
<Stamp>771324d1-0c59-4f12-b81e-96edb5185ef7</Stamp>
</Connection>
そして、必要なのは列形式の and です。そして、本質的にホスト名が Hostname-H-A10D と等しい場合、最後の D を一致させ、最初の列を Dev、Q を Test としてマークし、最後に Prod として文字を付けないようにしたいと考えています。したがって、出力は次のようになります -->
Dev Hostname-H-A10D 10.0.0.100
Dev Hostname-H-A11D 10.0.0.101
Prod Hostname-H-A12 10.0.0.201
Test Hostname-H-A13Q 10.0.0.10
私は sed/awk/etc をいじってみましたが、一時的なフラット ファイルを書き出さないと、必要な形式を取得できないだけではありません。xmlstarlet や xmllint などを使用して、これを配列に入れることをお勧めします。もちろん、より良い提案を行うことができます。それが私がここにいる理由です:) ありがとうございます。