我的文件太大,无法打开。但是,我只需要该文件的最后一部分。有一行包含此字符串的文本:DATA FROM NSERCH= 249
如果我可以将所有内容从该行拖到文档末尾,则应该可以打开文件。
答案 0 :(得分:2)
您可以使用Get-Content
cmdlet并读取行,直到找到您选择作为此起点的字符串为止。
$filename = 'FULL PATH TO THE TOO LARGE TO OPEN FILE'
$outputPath = 'FULL PATH TO THE OUTPUT.TXT FILE'
$saveit = $false
Get-Content -Path $filename | ForEach-Object {
# the $_ automatic variable represents a single line of the file
if ($saveit) {
Add-Content -Path $outputPath -Value $_
}
else {
$saveit = ($_ -match 'DATA\s+FROM\s+NSERCH=\s+249')
}
}
下面的代码具有完全相同的功能,但是需要.NET 4.0或更高版本,因此,如果您使用的是PowerShell 3.0或更高版本,则可以使用[System.IO.File]::ReadLines()
方法来加快速度:
$filename = 'FULL PATH TO THE TOO LARGE TO OPEN FILE'
$outputPath = 'FULL PATH TO THE OUTPUT.TXT FILE'
$saveit = $false
foreach ($line in [System.IO.File]::ReadLines($filename)) {
if ($saveit) {
Add-Content -Path $outputPath -Value $line
}
else {
$saveit = ($line -match 'DATA\s+FROM\s+NSERCH=\s+249')
}
}
另一个Get-Content
替代方案可能是:
$filename = 'FULL PATH TO THE TOO LARGE TO OPEN FILE'
$outputPath = 'FULL PATH TO THE OUTPUT.TXT FILE'
$saveit = $false
$reader = [System.IO.File]::OpenText($filename)
while (!($reader.EndOfStream)) {
$line = $reader.ReadLine()
if ($saveit) {
Add-Content -Path $outputPath -Value $line
}
else {
$saveit = ($line -match 'DATA\s+FROM\s+NSERCH=\s+249')
}
}
$reader.Close()
答案 1 :(得分:1)
更新:这不是直接答案,而是仅搜索部分文件的解决方法:仅检查最后几行。如果需要,可以通过增加行数来重复进行此操作。
here中描述的Get-Content -Tail <number of lines>
参数指定从文件或其他项目末尾开始的行数。您可以使用它来减少输入。此参数是在PowerShell 3.0中引入的。