我有一个脚本,它使用robocopy传输文件并将日志写入文件“Logfile.txt”之后,我进一步解析文件“LogFile.txt”并浏览必要的数据并将其写入其他文本文件中“LogFile_Parsed.Txt”。我的问题已经结束了。最初我计算了没有行并解析了每一行;我的目标是当我到达与跳过的单词匹配的行时,如果行号为x;我将(x-5)到(x + 1)的行添加到新的日志文件“LogFile_Parsed.Txt”。我在说的话就在下面;
Total Copied Skipped Mismatch FAILED Extras
Dirs : 1 1 0 0 0 0
现在,我被困住了;我只想将这些行附加到已解析的日志区域,当跳过或失败的行下方的数字大于0时;即如下;
Total Copied Skipped Mismatch FAILED Extras
Dirs : 1 1 1 0 1 0
怎么做?我提到的上述两行在整个日志文件中是一致的。如何知道跳过或失败的数字的确切位置并阅读它?请让我知道你宝贵的建议。
答案 0 :(得分:1)
如果我理解正确,你想要找到任何带有" Skipped"然后在下面的列中输入数字为1的行" Skipped",并将这两行和前面五行附加到新文件中?
以下内容将起作用如果所有匹配行的格式如下所示:
$logfile = gc '<path>\Logfile.txt'
for ($i = 0; $i -lt $logfile.count; $i++) {
if ($logfile[$i] -match 'Skipped') {
if ($logfile[$i + 1] -match '(?<=Dirs :(\s+[0-9]+){2}\s+)1') {
$logfile[($i - 5)..($i + 1)] | Out-File -Append '<path>\Logfile_Parsed.txt'
}
}
}
如果列的数量和顺序不同,您需要使用捕获组来查找&#34; Skipped&#34;的序数位置。并检查下一行的相应位置是否有1。这有点复杂,所以如果足够的话我就不会进入。