当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 在 PowerShell 中逐行读取文件

作者:精品下载站 日期:2024-12-14 01:58:14 浏览:12 分类:玩电脑

在 PowerShell 中逐行读取文件


我们可以使用PowerShell逐行读取文件,无论是文本文件还是CSV文件。此方法允许我们单独处理文件中每一行的信息。

要读取文件,我们使用 PowerShell 中的 Get-Content cmdlet。此 cmdlet 会将对象(内容)一一输出到管道中。但如果将其分配给变量,则内容将存储在数组中。

在本文中,我将通过一些示例向您展示如何使用 Get-Content cmdlet 逐行读取文件,并提供处理较大文件的提示。

逐行读取文件

要在 PowerShell 中读取文本文件的内容,可以使用 Get-Content cmdlet。默认情况下,此 cmdlet 会将文本文件的每一行作为单独的字符串返回到管道。这意味着您可以在 PowerShell 读取每一行后立即对其进行处理。

例如,要读取文本文件“file1.txt”的内容并在控制台中显示每一行,我们可以这样做:

Get-Content -path "C:\temp\File1.txt" | ForEach-Object {
    Write-Host "The content of this line is - $_"
}

另一种选择是将结果分配给变量。在这种情况下,每一行都将作为字符串存储在数组中,以便您稍后循环遍历它:

$file1 = Get-Content -path "C:\temp\File1.txt"

ForEach($line in $file1) {
    Write-Host $line
}

然而,这里有一个重要的注意事项。如果文件仅包含一行文本,则内容将存储为字符串,而不是数组。在大多数情况下,这不会成为问题,但是如果您想要从数组中获取第一行,那么您可能会得到一些意想不到的结果:

$file1 = Get-Content -path "C:\temp\File1.txt"

# Return the first line:
Write-Host $file1[0]

# Result : Line 1: This is the first line of the file.

$file2 = Get-Content -path "C:\temp\File2.txt"
# Return the first line:
Write-Host $file2[0]

# Result : T

[玩转系统] 在 PowerShell 中逐行读取文件

为了防止这种情况,我们可以使用数组子表达式运算符,它确保结果始终是数组:

$arrayFromFile = @(Get-Content -path "C:\temp\File2.txt")

# or cast an array:
[array]$arrayFromFile = @Get-Content -path "C:\temp\File2.txt"

读取大文件

当您需要读取大文件,或者通常关心性能时,最好使用直接 .NET 方法来读取文件。

需要注意的是,当您使用 .NET 方法时,应始终使用文件的绝对路径,而不是相对路径。其原因是 .NET 方法有时具有与 PowerShell 不同的工作目录。

$arrayFromFileNET = [IO.File]::ReadAllLines("C:\temp\File2.txt")

我做了一些测试来衡量这两种方法之间的差异,.NET 方法几乎比 Get-Content 方法快 10 倍。对于测试,我使用了 13 MB 的日志文件,并运行每个测试 5 次以获得良好的平均值。

[玩转系统] 在 PowerShell 中逐行读取文件

仅读取第一行或最后一行

有时您不需要读取文本文件的所有行,但您可能只想读取文件的第一行或最后一行。为此,我们可以使用 Get-Content cmdlet 的 -First-Tail 参数。

要读取文本文件的最后一行:

Get-Content -Path "C:\temp\File1.txt" -Tail 1

要只读取第一行,您可以执行以下操作:

Get-Content -Path "C:\temp\File1.txt" -First 1

您可以增加该数字以达到文件的前 n 行或最后 n 行。

总结

在大多数情况下,Get-Content cmdlet 是在 PowerShell 中逐行读取文件的最佳选项。但当您需要处理大文件时,那么绝对值得使用 .NET 方法。与 PowerShell cmdlet 相比,它要快得多。

希望您喜欢这篇文章,请务必下载免费的 PowerShell 备忘单,如果您有任何疑问,请在下面发表评论。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯