我读了很多主题,但还没有解决我的问题,所以我创建了一个新的主题。
我有以下文件:
文件1:
1
2
3
ABS START
4
5
6
文件2:
7
8
9
ABS END
10
11
12
我想在ABS开始-ABS结束之间获得内容。因为它们在不同的文件中,所以下面的命令不起作用
$content = get-content -raw file*.txt | select-string -allmatches '(?smi)ABS START.*ABS END'
$content.matches | foreach {$_.value}
使用for循环逐行读取似乎是不可能的。因为所有的文件都超过了2mil行。我试过这种方法,但花了几天时间,但没有完成。
这是我的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
}
}
}
}
寻求您的帮助,感谢所有
我看到了你的解决方案,我有另一个想法:
$temp = get-content file*.txt
$begin = $temp.indexof("ABS Start")
$end = $temp.indexof("ABS End")
现在试试:
$temp[$begin..$end]
我希望这能有所帮助☺
最后,我想到了一个解决方案。
我将读取每个文件的每一行,并将内容写入临时文件
如果行content="ABS START",则清除临时文件内容
如果行content="ABS END",则将临时文件的内容添加到输出文件中。
所以它只需要一个循环,整个文件在30分钟内就处理完毕了。
顺便说一句,有人能教我如何结束这个问题吗?