PowerShell:如何计算csv文件中的行数?

时间:2011-07-28 08:07:04

标签: command-line powershell csv count powershell-v1.0

如何使用PowerShell计算csv文件中的行数?我试过像

这样的东西
Get-Content -length "C:\Directory\file.csv"

(Get-Content).length "C:\Directory\file.csv"

但这会导致错误。

6 个答案:

答案 0 :(得分:37)

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++ }

可以在任何使用get-content或measure-object的地方插入上面的代码段,只需引用$ LinesInFile变量来获取文件的行数。

答案 1 :(得分:28)

将其传递到Measure-Object cmdlet

Import-Csv C:\Directory\file.csv | Measure-Object

答案 2 :(得分:7)

一般(csv与否)

@(Get-Content c:\file.csv).Length

如果文件只有一行,那么它就会失败。(你需要@前缀...否则如果文件有一行,它只会计算字符。

Get-Content c:\file.csv | Measure-Object -line

但如果任何记录占用多行,则两者都将失败。然后更好地导入csv并测量:

Import-Csv c:\file.csv | Measure-Object | Select-Object -expand count

答案 3 :(得分:0)

你可以尝试

(Import-Csv C:\Directory\file.csv).count

$a=Import-Csv C:\Directory\file.csv
$a.count

答案 4 :(得分:0)

(Import-Csv C:\Directory\file.csv).count是其中唯一准确的一个。

我在一个有4781行的csv上尝试了所有其他建议,除此之外的所有建议都返回了4803。

答案 5 :(得分:0)

您可以简单地在Powershell中使用像comand这样的unix。

如果您提交test.csv 然后获取行数的命令是

gc test.csv | Measure-Object
相关问题