PowerShell在单独的文件中以两种模式获得子字符串

问题描述 投票:1回答:1

我已经阅读了很多主题,但是还没有解决我的问题,所以我创建了一个新主题。

我有以下文件:

文件1:

1
2
3
ABS START
4
5
6

文件2:

7
8
9
ABS END
10
11
12

我想在ABS START-ABS END之间获取内容。因为它们位于不同的文件中,所以遵循命令不起作用

$content = get-content -raw file*.txt | select-string -allmatches '(?smi)ABS START.*ABS END' 
$content.matches | foreach {$_.value}

使用循环逐行读取似乎是不可能的。因为所有文件都超过200万行。我尝试过这种方式,但是花了几天时间却没有完成。

这是我的for循环代码。它可以用很少的文件工作,但是当我运行所有文件时,似乎无法完成

$Log = type file*
for ($i=1; $i -le $Log.Count; $i++){
   $Line = $Log[$i]
   if($Line -match "ABS START"){
      for ($j = $i; $j -le $Log.Count; $j++){
         $LineJ = $Log[$j]
         if($LineJ -match "ABS END"){
            $i = $j
            break
         }
         else{
            $Log[$j] >> $Result   
         }
      }
   }
}

正在寻找您的帮助,谢谢大家

powershell file-get-contents select-string
1个回答
0
投票

最后,我想了个办法。

我将读取每个文件的每一行并将内容写入临时文件

如果行内容=“ ABS START”,则清除临时文件内容

如果行内容=“ ABS END”,则将临时文件的内容添加到输出文件。

所以它只需要1个循环,整个文件在30分钟内就已处理。

顺便说一句,有人可以教我如何结束问题吗?

© www.soinside.com 2019 - 2024. All rights reserved.