1

我想执行一些日志分析。下面列出的示例日志文件。我知道如何使用过程/脚本解决此问题,但我想知道如何使用管道等以“powershell 样式”完成此问题

日志文件包含带有文件名和组件列表的字符串。它们中的每一个都可以“通过”或“失败”。我想打印以“Checking”开头的所有行,其中至少有一个 FAILED 组件。


Checking : C:\TFS\Datavarehus\Main\ETL\SSIS\DVH Project\APL_STG1_Daglig_Master.dtsx

Checking : C:\TFS\Datavarehus\Main\ETL\SSIS\DVH Project\COPY_STG1_APL_Dekningsgrupper_Z1.dtsx
    SQLCommand [Z1 APL_Dekningsgrupper] FAILED the VA1 check (table name as source)
    SQLCommand [APL_Dekningsgrupper] passed the VA1 check
    SQLCommand [FAK_Avkastningsgaranti_Kollektiv] FAILED the VA1 check (table name as source)

Checking : C:\TFS\Datavarehus\Main\ETL\SSIS\DVH Project\DM_DVH_BpBedrift_InvesterteFond 1.dtsx
    SQLCommand [DVH] passed the VA1 check
    SQLCommand [Avtale Kurs] passed the VA1 check

乍一看,我需要类似的东西

gc logtxt | select-string -pattern 'FAILED' -context <nearest line starting with "Checking" in begining direction>,<lines count from CheckingLine to "LineWith 'FAILED'">
4

2 回答 2

2

粗略的版本:

$line = $null
gc test.txt | %{ 
    if($line){ 
        if($_ -match "FAILED"){
            $line
            $line = $null
        }
    }
    if($_ -match "^Checking"){
        $line = $_
    } 
}
于 2012-05-23T09:19:31.293 回答
0

感谢您的提示。最后我得到了以下工作代码:

gc test.txt | Foreach {
    if ($_.StartsWith('Checking'))  {
        $pkname = $_
    }
    if ($_.Contains('FAILED')) { 
        if (!($pkname.equals($printed_pkname))) {
        $pkname; 
        $printed_pkname=$pkname} 
        $_ }
    }
于 2012-06-08T07:29:02.277 回答