我有一个非常大的文本文件,大小为250 GB,由供应商提供给我们。它们还为我们提供了一个控制文件,该文件应该具有大文件中的行数。有时会出现不匹配的情况。 如何在Powershell中计算行数?我尝试了此命令,但运行了超过半小时,但尚未完成。
Get-content C:\test.txt | Measure-Object –Line
(gc C:\test.txt | Measure-object | select count).count
感谢任何帮助 谢谢 先生
答案 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分钟。您还可以检查文件,它可能具有一些自动增量索引或恒定的行大小。