我需要解析一个文本文件并从中检索数据...基于同一文件中的其他数据。

我需要找到说不好的行..然后找到它们所在的节点。
我知道如何将数据拉入..并找到“不好的”和“节点”。我也有一个想法,我确定要查找的内容过于复杂。我可以将Node行解析为一个数组

$test = (select-string -path C:\error.txt -Pattern "Node:").linenumber

然后找到不正常的行号并备份大声笑,但这似乎是最困难的方法。我熟悉PS,但不是专家。
$test2 = (select-string -path C:\error.txt -Pattern "Not ok").linenumber

所以说出我需要的..

解析节点的文件..找到下面的行不行..如果是,则将节点设置为变量...如果行不行,则找不到下一个节点。

谢谢你的帮助

下面的示例txt文件
Node: Server
*********************

Line 1 ok
line 2 ok
line 3 ok
Line 4 Not ok
line 5 ok
line 6 ok
*********************

Node: Server2
*********************
Line 1 ok
line 2 ok
line 3 Not ok
Line 4 ok
line 5 ok
line 6 ok
*********************

最佳答案

$errorNodes = @()

Get-Content C:\temp\test.txt | ForEach-Object {
    if ($_ -imatch 'Node: (.+)$') {
        $node = $Matches[1]
    }
    if ($_ -imatch 'not ok') {
        $errorNodes += $node
    }
}

$errorNodes

说明
  • Get-Content逐行读取文件。
  • 对于每一行,首先检查它是否是一个节点。如果是这样,请将$node变量设置为当前节点的名称。
  • 然后检查该行是否与文本“not ok”匹配。如果是这样,请将节点名称添加到错误节点列表中(数组变量$errorNodes

  • 因此,最后,$errorNodes将包含有问题的节点。

    关于parsing - 给定重复的部分,如何使用Powershell查找与某些条件匹配的部分,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25319762/

    10-10 00:17