PowerShell:如何读取行中特定数字的日志文件?

时间:2014-06-02 09:45:58

标签: file powershell


我想读取每行中的日志文件是一个序列号。现在我想得到所有有seq.no.的行。大于或等于$ low = 111和更少或eqal而不是$ high = 123 - 我可以用Where-Object做到这一点:

 $LogEntries = Get-Content -Path $LogFile | Where-Object {
        $f = $_ -maltch 'EntryNo=(\d+)\D'
        if ($f) {
           [decimal]n = mathches[1]
           if ( n -ge $low -and n -le $high ) {
             # how to continue?
           }
         }
 }

如果可以,我该如何填写括号?

提前致谢,
gooly

Loegfile Entrioes:

 PowerShell;Test.ps1;....;SeqNo=109;Tag=..
 PowerShell;Test.ps1;....;SeqNo=110;Tag=..
 PowerShell;Test.ps1;....;SeqNo=111;Tag=..
 PowerShell;Test.ps1;....;SeqNo=112;Tag=..
 PowerShell;Test.ps1;....;SeqNo=113;Tag=..
 PowerShell;Test.ps1;....;SeqNo=114;Tag=..

...

1 个答案:

答案 0 :(得分:2)

只需使用它应该如何使用的管道:

  1. 获取文件内容

    Get-Content logfile |
    
  2. 过滤序列号

    where {
      if ($_ -match 'SeqNo=\d+') {
        $seq = +$Matches[1]     # The + in front coerces the match to a number
        $seq -ge $low -and $seq -le $high
      } else { $false }
    }
    
  3. 为了增加优雅,高低的比较也可以按如下方式进行:

    where { $low..$high -eq $seq }
    

    (可能会慢一点,取决于$low$high之间的差距有多大。)