PowerShell 在单独的文件中以两种模式获取子字符串
PowerShell get substring in two pattern in separate file
看了很多题目还是没有解决我的问题,所以新建了一个题目。
我有以下文件:
文件 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}
使用for循环逐行读取似乎是不可能的。因为所有文件都超过 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
}
}
}
}
寻求大家的帮助,谢谢大家
终于想到了解决办法
我会读取每个文件的每一行并将内容写入一个临时文件
If line content = "ABS START" then clear the temporary file content
如果行内容 = "ABS END" 然后将临时文件的内容添加到输出文件。
所以只需要1个循环,30分钟处理完整个文件
顺便说一句,谁能教我如何关闭问题?
我看到了你的解决方案,我有另一个想法给你:
$temp = get-content file*.txt
$begin = $temp.indexof("ABS Start")
$end = $temp.indexof("ABS End")
现在尝试:
$temp[$begin..$end]
希望对你有帮助☺
看了很多题目还是没有解决我的问题,所以新建了一个题目。
我有以下文件:
文件 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}
使用for循环逐行读取似乎是不可能的。因为所有文件都超过 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
}
}
}
}
寻求大家的帮助,谢谢大家
终于想到了解决办法
我会读取每个文件的每一行并将内容写入一个临时文件
If line content = "ABS START" then clear the temporary file content
如果行内容 = "ABS END" 然后将临时文件的内容添加到输出文件。
所以只需要1个循环,30分钟处理完整个文件
顺便说一句,谁能教我如何关闭问题?
我看到了你的解决方案,我有另一个想法给你:
$temp = get-content file*.txt
$begin = $temp.indexof("ABS Start")
$end = $temp.indexof("ABS End")
现在尝试:
$temp[$begin..$end]
希望对你有帮助☺