我有一个非常大(>100k 行)的文件,我想将其拆分
:
。foo:bar:baz
变为 bar:baz
。cut -d ':' -f2- myfile.txt > newfile.txt
它会在几毫秒内完成。迄今为止我发现的最有前途的方法如下所示:
$reader = [System.IO.File]::OpenText("myfile.txt")
try {
for() {
$line = $reader.ReadLine()
if ($line -eq $null) { break }
$split = $line.Split(":")
$join = $split[1..($split.Length-1)] -join ":"
Add-Content -Path "newfile.txt" -Value "$join"
}
}
finally {
$reader.Close()
}
请帮忙/建议。
在此答案的两个示例中,您可以使用正则表达式而不是拆分,这样会更有效。有关正则表达式的详细信息,您可以检查:https://regex101.com/r/iGfHWp/1。
(Get-Content myfile.txt -Raw) -replace '(?m)^.+?:' |
Set-Content newfile.txt
File.ReadLines
+ StreamWriter
:try {
# use absolute path always in this case, i.e.:
# `newfile.txt` should be `X:\path\to\newfile.txt`
$writer = [System.IO.StreamWriter] 'newfile.txt'
$re = [regex]::new(
'^.+?:', [System.Text.RegularExpressions.RegexOptions]::Compiled)
foreach ($line in [System.IO.File]::ReadLines('myfile.txt')) {
$writer.WriteLine($re.Replace($line))
}
}
finally {
if ($writer) {
$writer.Dispose()
}
}