【问题标题】:How to use Powershell to return both filename and the matched text in the file如何使用 Powershell 同时返回文件名和文件中的匹配文本
【发布时间】:2011-12-19 08:49:37
【问题描述】:

我有一个从多个服务器收集的预处理日志文件列表。它们采用 CSV 格式,日志文件的内容采用以下格式:

日期、时间、值1、值2、值3

我希望将单个文件与来自日志文件的文件名(具有服务器名称)的信息以及 Value1 超过日志文件中某个值的所有日期和时间进行合并,以便进一步分析。换句话说,我希望预期的输出是:

文件名1,2011/10/01,12:00:00.256,2345,210,0 文件名1,2011/10/05,13:45:36.321,2666,209,0 文件名5,2011/10/09,09:08:02.111,2100,180,0 文件名20,2011/10/15,17:09:33.256,3019,109,0 ...

我曾尝试使用 Powershell + 正则表达式来提取信息。但是,我只能获取包含我想要的值和文件名的行,或者只能获取包含日期、时间和 Value1 的行。 PowerShell 脚本是:

select-string -path "C:\Server\Logs*.csv" -pattern "([0-9]{4}/[0-9]{1,2}/[0-9]{1 ,2}),([0-9]{2}:[0-9]{2}:[0-9]{2}).[0-9]{3},([2-9][ 0-9]{3})" |选择对象-属性文件名、行号、行|导出-csv-path highload2.csv

select-string -path "C:\Server\Logs*.csv" -pattern "([0-9]{4}/[0-9]{1,2}/[0-9]{1 ,2}),([0-9]{2}:[0-9]{2}:[0-9]{2}).[0-9]{3},([2-9][ 0-9]{3})" |选择对象-展开匹配 | Foreach {$.Groups[1].Value, $.Groups[2].Value, $_.Groups[3].Value}

有没有办法得到我需要的结果?

谢谢,

【问题讨论】:

    标签: regex powershell


    【解决方案1】:

    如果日志文件是正确的 CSV 并且具有相同的标头信息,您可以使用 Import-Csv 更简单地执行此操作:

    Get-ChildItem c:\server\logs*.csv | Foreach {$f = $_.fullname; Import-Csv $_ | 
        Add-Member NoteProperty LogFilename $f -passthru } | 
        Export-Csv combinedlog.csv
    

    【讨论】:

      【解决方案2】:

      类似于你的单行:

      select-string -path "C:\Server\Logs*.csv" -pattern "([0-9]{4}/[0-9]{1,2}/[0-9]{1,2}),([0-9]{2}:[0-9]{2}:[0-9]{2}).[0-9]{3},([2-9][0-9]{3}),([0-9]*),([0-9]*)" | select-object -property filename, @{N="Date";E={$_.matches | %{$_.groups[1].value}}}, @{N="Time";E={$_.matches | %{$_.groups[2].value}}}, @{N="Value1";E={$_.matches | %{$_.groups[3].value}}}, @{N="Value2";E={$_.matches | %{$_.groups[4].value}}}, @{N="Value3";E={$_.matches | %{$_.groups[5].value}}} | export-csv -path highload2.csv
      

      但是,如果您打算重复使用您的代码,您可能希望使用 import-csv 处理您的 .csv 文件,这应该会提高可读性。

      【讨论】:

      • 此外,如果你正确使用import-CSV,你可以将CSV的日期部分设置为DateTime类型,并与-lt -gt等进行比较。这绝对是要走的路!跨度>
      猜你喜欢
      • 2017-11-06
      • 1970-01-01
      • 1970-01-01
      • 2013-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-23
      相关资源
      最近更新 更多