ファイルリストに基づくgrepファイルの内容

ファイルリストに基づくgrepファイルの内容

CentOS 6.5、qemu-kvmを実行します。

実行中の仮想マシンのリストを作成するスクリプトがあります。実行中の仮想マシンの.xmlファイルからのみ情報を抽出したいと思います。

cat /dev/null > /<path>/runlist virsh list --all|grep running|awk -F" " '{print $2}' > /<path>/runlist.tmp

これで実行中の仮想マシンのリストがあるので、それをすべての仮想マシンの.xmlファイルを含むディレクトリリストの対応する.xmlファイルと一致させ、いくつかの情報を抽出しようとしています。

私は次のことができることを知っています。

grep <info> </path/file.xml>

しかし、実行リストファイルをディレクトリリストと比較して解析し、実行中の仮想マシンに関連するファイルからのみ情報を取得する中間ビットをどのように取得しますか?


サンプルXMLファイル:

<domain type='kvm'>
  <name>"X"</name>
  <uuid>"X"</uuid>
  <memory unit='KiB'>"X"</memory>
  <currentMemory unit='KiB'>"X"</currentMemory>
  <vcpu placement='static'>1</vcpu>
  <os>
    <type arch='x86_64' machine='X'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/<path>/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw' cache='none'/>
      <source file='/path/file.img'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </disk>
    <controller type='usb' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
    </controller>
    <interface type='bridge'>
      <mac address='X'/>
      <source bridge='br1'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <input type='tablet' bus='usb'/>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </memballoon>
  </devices>
</domain>

ベストアンサー1

あなたの質問に対する直接的な答えは次のとおりです。

grep -f /path/to/runlist /path/to/file.xml

しかし、私の考えではこれはXYの問題:考えずにどのようにこの問題を解決するために何をしますか?


runlistxmlファイル名を含むファイルなので、次のxml処理ツールを使用します。xmlstarlet)vcpu抽出:

$ cat runlist
sample1.xml
sample2.xml
$ xmlstarlet sel -t -v /domain/name -o $'\t' -v /domain/currentMemory -o $'\t' -v /domain/vcpu -nl $(< ./runlist)
"X"     "X"     1
"XX"    256     16

おすすめ記事