我已经阅读了很多主题,但是还没有解决我的问题,所以我创建了一个新主题。
我有以下文件:
文件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
}
}
}
}
正在寻找您的帮助,谢谢大家
最后,我想了个办法。
我将读取每个文件的每一行并将内容写入临时文件
如果行内容=“ ABS START”,则清除临时文件内容
如果行内容=“ ABS END”,则将临时文件的内容添加到输出文件。
所以它只需要1个循环,整个文件在30分钟内就已处理。
顺便说一句,有人可以教我如何结束问题吗?