Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Optimization 使用where和select字符串运算符分析powershell中的文本文件_Optimization_Powershell 2.0 - Fatal编程技术网

Optimization 使用where和select字符串运算符分析powershell中的文本文件

Optimization 使用where和select字符串运算符分析powershell中的文本文件,optimization,powershell-2.0,Optimization,Powershell 2.0,最近我不得不解决一个问题,读取大量日志文件并从中提取特定的文本块 通过一些尝试和错误,我找到了一个有效的解决方案,但我想知道是否有更好的方法 这些日志文件包含文本块,每个文本块由一个“标题”引入,后跟未知数量的条目,并以空行结束。(以下示例中,数字为伪线号) 因此,我知道“logevent”标记,我可以使用$line=$logfile>选择字符串-模式“logevent1”和$lineNumber=$line>选择对象-ExpandProperty lineNumber检索行,我有第一个值要使用

最近我不得不解决一个问题,读取大量日志文件并从中提取特定的文本块

通过一些尝试和错误,我找到了一个有效的解决方案,但我想知道是否有更好的方法

这些日志文件包含文本块,每个文本块由一个“标题”引入,后跟未知数量的条目,并以空行结束。(以下示例中,数字为伪线号)

因此,我知道“logevent”标记,我可以使用
$line=$logfile>选择字符串-模式“logevent1”
$lineNumber=$line>选择对象-ExpandProperty lineNumber
检索行,我有第一个值要使用
获取内容
和范围操作符
[$x..$y]
。 在我的例子中,这将是35。但是如何获得文本块后面的第一个空行

我尝试使用
Select String-Pattern'
,但由于字符串为空,因此出现了一个即时异常。所以我写了以下函数:

function Get-TextBlock([string]$filePath,$lineNumber)
{
    $startLine = ($lineNumber -1)
    $counter = 0
    $emptyLines = @()    
    Get-Content (Get-ChildItem $filePath) | ForEach-Object { 
        if( $_ -eq '' ) {
            $emptyLines += $counter; 
        }
        $counter++
    }
    $endLine = 0
    $counter = 0
    while( $endLine -le $startLine) {
        $endLine = ($emptyLines[$counter]); $counter++; 
    }
    $output += ((Get-ChildItem $filePath) | Get-Content)[$startLine..$endLine]
    return $output
}
正如前面提到的,这个函数对我很有用,但我觉得有更好更简单的方法来完成这个任务

输出(在删除伪行号之后;)如下所示

PS F:\scripts\powershell> Get-TextBlock '.\function-test.txt' 35
logevent1
entry1
entry2 
entry3 


____________________________________________________________________________
问候

PS F:\scripts\powershell> Get-TextBlock '.\function-test.txt' 35
logevent1
entry1
entry2 
entry3 


____________________________________________________________________________