我想执行一些日志分析。下面列出的示例日志文件。我知道如何使用过程/脚本解决这个问题,但我想知道如何使用管道等在'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'">
答案 0 :(得分:2)
原始版本:
$line = $null
gc test.txt | %{
if($line){
if($_ -match "FAILED"){
$line
$line = $null
}
}
if($_ -match "^Checking"){
$line = $_
}
}
答案 1 :(得分:0)
感谢您的提示。最后我得到了以下工作代码:
gc test.txt | Foreach {
if ($_.StartsWith('Checking')) {
$pkname = $_
}
if ($_.Contains('FAILED')) {
if (!($pkname.equals($printed_pkname))) {
$pkname;
$printed_pkname=$pkname}
$_ }
}