我有一个很大的XML文件(0.5GB),没有换行符。我希望能够看到,比方说,前200个字符,而不必打开整个文件。有没有办法用PowerShell做到这一点?
lrl1mhuk1#
您可以使用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核心不支持byte编码。已将其替换为-AsByteStream参数。
byte
-AsByteStream
$bytes = Get-Content .\file.txt -AsByteStream -TotalCount 200 [System.Text.Encoding]::Unicode.GetString($bytes)
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
bihw5rsg3#
Get-Content采用-ReadCount选项,因此您只能采用前X行。如果您确实需要字符粒度,则需要使用.NET中的[IO.File]::Read方法之一
qyswt5oh4#
@keith-hill带我走了大半路。下面是我用来从VMware虚拟磁盘中获取第一个字符的方法。在前1000个左右的字符中有重要的信息,但我从来没有尝试打开一个30 GB的文件。
$bytes = Get-Content .\VMwareVirtualDiskFile.vmdk -Encoding byte -TotalCount 1000 [String]::Concat([char[]]($bytes))
yiytaume5#
(获取内容myfile).子字符串(0,x)其中x是您希望每行包含的字符数,例如$lines =(get-content myfile).Substring(0,10)将返回一个字符串数组,其中每个成员包含myfile中每行的前10个字符。
5条答案
按热度按时间lrl1mhuk1#
PowerShell桌面(最高5.1)
您可以使用Get-Content在字节级别读取,如下所示:
如果日志文件是ASCII,则可以将其简化为:
PowerShell核心6.0及更新版本
PowerShell核心不支持
byte
编码。已将其替换为-AsByteStream
参数。uemypmqf2#
通过powershell commandlets复制二进制文件会有点慢,不过你可以从powershell运行以下命令来获得不错的性能:
已在Win 10 PS 5.1中测试
结果:4秒内处理1.43GB
bihw5rsg3#
Get-Content采用-ReadCount选项,因此您只能采用前X行。
如果您确实需要字符粒度,则需要使用.NET中的[IO.File]::Read方法之一
qyswt5oh4#
@keith-hill带我走了大半路。
下面是我用来从VMware虚拟磁盘中获取第一个字符的方法。在前1000个左右的字符中有重要的信息,但我从来没有尝试打开一个30 GB的文件。
yiytaume5#
(获取内容myfile).子字符串(0,x)
其中x是您希望每行包含的字符数,例如$lines =(get-content myfile).Substring(0,10)将返回一个字符串数组,其中每个成员包含myfile中每行的前10个字符。