擅长:python、mysql、java
<p>只是为了好玩,我想你的第一次尝试已经不远了。您只需将字段分隔符设置为<code>:</code>(<code>-F:</code>),而它应该是<code>=</code>。你知道吗</p>
<p>也许你可以试试:</p>
<pre><code>awk 'BEGIN{FS="="; OFS=" - "; desc=""}function display(){print dev, desc, flags}/Device/{if(desc!="") display(); desc=""; flags=""; dev=$0; gsub("Dev.*PLAY", "Display ", dev)}/Desc/{desc=$2}/Flags/{flags=$2}END{display}'
</code></pre>
<p>它的作用是:</p>
<ul>
<li>在开始时,将字段分隔符设置为<code>=</code>,并将输出字段分隔符设置为<code>-</code>(用于格式化)</li>
<li>定义一个函数<code>display</code>来打印一行,因为它将被调用两次</li>
<li>如果行包含<code>Device</code>,则打印前面的设备(如果有),存储设备的id并重置所有其他变量</li>
<li>如果行包含<code>Desc</code>(或<code>Mode</code>),则将第二个字段存储在相应的变量中</li>
<li>在文件末尾,打印最后一个设备</li>
</ul>
<p>所有这些都会产生:</p>
<pre><code>Display 1 - "VMware SVGA 3D" - PRIMARY_DEVICE, ATTACHED_TO_DESKTOP
Display 2 - "VMware SVGA 3D" - 0x00000000
Display V1 - "RDP Encoder Mirror Driver" - MIRRORING_DRIVER, TS_COMPATIBLE
Display V2 - "RDP Encoder Mirror Driver" - MIRRORING_DRIVER, TS_COMPATIBLE
Display V3 - "RDP Encoder Mirror Driver" - MIRRORING_DRIVER, TS_COMPATIBLE
</code></pre>
<p><code>awk</code>语法有点晦涩,但非常简洁。。。你知道吗</p>