使用PowerShell获取大文件的前n个字符

drnojrws  于 2023-01-26  发布在  Shell
关注(0)|答案(5)|浏览(230)

我有一个很大的XML文件(0.5GB),没有换行符。我希望能够看到,比方说,前200个字符,而不必打开整个文件。有没有办法用PowerShell做到这一点?

lrl1mhuk

lrl1mhuk1#

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核心6.0及更新版本

PowerShell核心不支持byte编码。已将其替换为-AsByteStream参数。

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

uemypmqf2#

通过powershell commandlets复制二进制文件会有点慢,不过你可以从powershell运行以下命令来获得不错的性能:

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

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

bihw5rsg

bihw5rsg3#

Get-Content采用-ReadCount选项,因此您只能采用前X行。
如果您确实需要字符粒度,则需要使用.NET中的[IO.File]::Read方法之一

qyswt5oh

qyswt5oh4#

@keith-hill带我走了大半路。
下面是我用来从VMware虚拟磁盘中获取第一个字符的方法。在前1000个左右的字符中有重要的信息,但我从来没有尝试打开一个30 GB的文件。

$bytes = Get-Content .\VMwareVirtualDiskFile.vmdk -Encoding byte -TotalCount 1000
[String]::Concat([char[]]($bytes))
yiytaume

yiytaume5#

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

相关问题