7

我有一个巨大的 XML 文件(0.5 GB),没有换行符。我希望能够在不打开整个文件的情况下查看前 200 个字符。有没有办法用 PowerShell 做到这一点?

4

4 回答 4

22

PowerShell 桌面(最高 5.1)

您可以使用 Get-Content 在字节级别读取,如下所示:

$bytes = Get-Content .\files.txt -Encoding byte -TotalCount 200
[System.Text.Encoding]::Unicode.GetString($bytes)

如果日志文件是 ASCII,您可以将其简化为:

[char[]](Get-Content .\files.txt -Encoding byte -TotalCount 200)

PowerShell Core 6.0 及更高版本

PowerShell Core 不支持byte编码。它已被-AsByteStream参数替换。

$bytes = Get-Content .\file.txt -AsByteStream -TotalCount 200
[System.Text.Encoding]::Unicode.GetString($bytes)
于 2013-09-21T19:21:14.377 回答
1

通过powershell commandlet复制二进制文件往往有点慢。但是,您可以从 powershell 运行以下命令以获得不错的性能:

cmd /c copy /b "large file.ext" "first n.ext"
FSUTIL file seteof "first n.ext" $nbytes

在 Win 10 PS 5.1 中测试
结果:1.43GB 在 4 秒内处理

于 2021-10-12T05:05:15.390 回答
0

Get-Content 采用 -ReadCount 选项,因此您只能采用前 X 行。

如果您真的想要字符粒度,则需要使用 .NET 中的 [IO.File]::Read 方法之一

于 2013-09-21T19:01:29.593 回答
-2

(get-content myfile).Substring(0,x)

其中 x 是您希望从每行中获取的字符数,例如 $lines = (get-content myfile).Substring(0,10) 将返回一个字符串数组,其中数组的每个成员包含每行的前 10 个字符我的文件。

于 2020-01-24T13:51:03.257 回答