regex - Powershell-使用正则表达式将2个值搜索到.xml文件中

标签 regex powershell

希望您在这种情况下一切顺利。

要求说明:
为了使我的生活更轻松,我尝试编写一个powershell脚本,目标是找到每个“名称”表,其中“保留”大小> 1G

下面的输出示例我想基于下面的xml文件示例获取

输出量

  • 表名称:tr_stat_history
  • 表大小:3,829623 GB
  • 表名称:appctrl_exefile
  • 表大小:1,58016 GB

  • xml文件样本
    <?xml version="1.0" encoding="utf-8" ?>
    <data>
    <record>
    <field value="tr_stat_history" name="Name"/>
    <field value="1024936 " name="Rows"/>
    <field value="3829623 KB" name="reserved"/>
    <field value="38120 KB" name="Data"/>
    <field value="120 KB" name="index_size"/>
    <field value="56 KB" name="Unused"/>
    </record>
    <record>
    <field value="appctrl_exefile" name="Name"/>
    <field value="2149679 " name="Rows"/>
    <field value="1580160 KB" name="reserved"/>
    <field value="120376 KB" name="Data"/>
    <field value="37336 KB" name="index_size"/>
    <field value="304 KB" name="Unused"/>
    </record>
    <record>
    <field value="appctrl_pdffile" name="Name"/>
    <field value="2149 " name="Rows"/>
    <field value="1580 KB" name="reserved"/>
    <field value="1203 KB" name="Data"/>
    <field value="3733 KB" name="index_size"/>
    <field value="508 KB" name="Unused"/>
    </record>
    </data>
    

    达到目标的最好方法是什么?

    预先感谢,

    最佳答案

    这是您可以尝试的另一种方法。我添加了注释来解释逻辑。

    # Create XML object to load data into
    $xml = New-Object -TypeName System.Xml.XmlDocument
    
    # Load in XML file
    $xml.Load("input.xml")
    
    # Iterate each child node underneath the data tag
    foreach ($node in $xml.data.ChildNodes)
    {
        # Get name and reserved fields
        $name = $node.field | Where-Object {$_.name -eq "Name"}
        $reserved = $node.field | Where-Object {$_.name -eq "reserved"}
    
        # Split on whitespace and take the digit
        # Do KB conversion to bytes by multiplying by 1024
        $kb = [long]$reserved.Value.Split(' ')[0] * 1024
    
        # Check if bigger than 1GB or 1073741824 bytes
        # Output table name and size if this is true
        if ($kb -gt 1GB)
        {
            Write-Output "Table name: $($name.Value)"
            Write-Output "Table size: $($kb / 1GB) GB"
        }
    }
    

    输出:
    Table name: tr_stat_history
    Table size: 3.65221309661865 GB
    Table name: appctrl_exefile
    Table size: 1.5069580078125 GB
    

    关于regex - Powershell-使用正则表达式将2个值搜索到.xml文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61227901/

    相关文章:

    java - 使用 Java 的 SQL 正则表达式

    powershell - 如何使用 Powershell 中的上下文选项从 Select-String 结果中删除文件名?

    performance - Powershell性能

    powershell - 我们如何在终端中处理 Visual Studio Code 中的问题

    java - 使用包含 (? :. |\s)*? 的模式进行正则表达式搜索需要越来越长的时间

    java - 从 json 到十进制的转换

    Java正则表达式

    ruby - 如何评估孤立的正则表达式

    用于获取文件夹的文件名和文件大小的 csv 文件的 Powershell 脚本

    powershell - 确定脚本中两点之间定义的函数