jra*_*ara 20 csv powershell command-line count powershell-1.0
如何使用powershell计算csv文件中的行数?我试过类似的东西
Get-Content -length "C:\Directory\file.csv"
Run Code Online (Sandbox Code Playgroud)
要么
(Get-Content).length "C:\Directory\file.csv"
Run Code Online (Sandbox Code Playgroud)
但这些都会导致错误.
Ten*_*n98 40
Get-Content和Measure-Object适用于小文件,但两者都对内存效率极低.我有大文件的真正问题.
当使用任一方法计算1GB文件中的行时,Powershell吞噬服务器上的所有可用内存(8GB),然后开始分页到磁盘.我离开它超过一个小时,但它仍然分页到磁盘所以我杀了它.
我找到的大文件的最佳方法是使用IO.StreamReader从磁盘加载文件并使用变量计算每一行.这样可以将内存使用量降低到非常合理的25MB,而且速度要快得多,大约需要30秒来计算1GB文件中的行数,或者花费几分钟来计算6GB文件.无论你的文件有多大,它都不会占用不合理数量的RAM:
[int]$LinesInFile = 0
$reader = New-Object IO.StreamReader 'c:\filename.csv'
while($reader.ReadLine() -ne $null){ $LinesInFile++ }
Run Code Online (Sandbox Code Playgroud)
可以在使用get-content或measure-object的任何地方插入上面的代码段,只需引用$ LinesInFile变量来获取文件的行数.
Sha*_*evy 28
将其传递给Measure-Object
cmdlet
Import-Csv C:\Directory\file.csv | Measure-Object
Run Code Online (Sandbox Code Playgroud)
一般(csv与否)
@(Get-Content c:\file.csv).Length
Run Code Online (Sandbox Code Playgroud)
如果文件只有一行,那么它将失败.(您需要@前缀...否则,如果文件有一行,则只计算该行中的字符数.
Get-Content c:\file.csv | Measure-Object -line
Run Code Online (Sandbox Code Playgroud)
但如果任何记录占用多行,则两者都将失败.然后更好地导入csv并测量:
Import-Csv c:\file.csv | Measure-Object | Select-Object -expand count
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
77890 次 |
最近记录: |