如何使用PowerShell计算csv文件中的行数?我试过像
这样的东西Get-Content -length "C:\Directory\file.csv"
或
(Get-Content).length "C:\Directory\file.csv"
但这会导致错误。
答案 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