Powershell Count行数非常大

时间:2019-02-26 20:08:33

标签: performance powershell

我有一个非常大的文本文件,大小为250 GB,由供应商提供给我们。它们还为我们提供了一个控制文件,该文件应该具有大文件中的行数。有时会出现不匹配的情况。    如何在Powershell中计算行数?我尝试了此命令,但运行了超过半小时,但尚未完成。

Get-content C:\test.txt | Measure-Object –Line

(gc C:\test.txt | Measure-object | select count).count

感谢任何帮助 谢谢 先生

2 个答案:

答案 0 :(得分:9)

如果性能很重要,请避免使用cmdlet和管道;使用switch -File

amd

$count = 0 switch -File C:\test.txt { default { ++$count } } 枚举指定文件的行;条件switch -File与任何行匹配。


要了解性能差异:

default

我的Windows 10 / PSv5.1计算机的采样结果:

# Create a sample file with 100,000 lines.
1..1e5 > tmp.txt
# Warm up the file cache
foreach ($line in [IO.File]::ReadLines("$pwd/tmp.txt")) { }

(Measure-Command { (Get-Content tmp.txt | Measure-Object).Count }).TotalSeconds

(Measure-Command { $count = 0; switch -File tmp.txt { default { ++$count } } }).TotalSeconds

也就是说,在我的计算机上,1.3081307 # Get-Content + Measure-Object 0.1097513 # switch -File 命令的速度大约快12倍。

答案 1 :(得分:2)

对于这么大的文件,我宁愿使用一些C编写的实用程序。安装gitbash,它应该具有wc命令:

wc -l yourfile.txt

我在5GB / 50M的行文件(在HDD上)上进行了测试,大约花了40秒钟。最佳的Powershell解决方案大约需要2分钟。您还可以检查文件,它可能具有一些自动增量索引或恒定的行大小。