我有一个巨大的 XML 文件(0.5 GB),没有换行符。我希望能够在不打开整个文件的情况下查看前 200 个字符。有没有办法用 PowerShell 做到这一点?
问问题
15723 次
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 回答