Ответ 1
Соедините его с командлетом Measure-Object
Import-Csv C:\Directory\file.csv | Measure-Object
Как подсчитать количество строк в файле csv с помощью powershell? Я попробовал что-то вроде
Get-Content -length "C:\Directory\file.csv"
или
(Get-Content).length "C:\Directory\file.csv"
но это приводит к ошибке.
Соедините его с командлетом Measure-Object
Import-Csv C:\Directory\file.csv | Measure-Object
Get-Content и Measure-Object отлично подходят для небольших файлов, но оба они неэффективны с памятью. У меня были проблемы с большими файлами.
При подсчете строк в 1 ГБ файле с использованием любого метода Powershell собрал всю доступную память на сервере (8 ГБ), а затем начал пейджинг на диск. Я оставил его в течение часа, но он все еще пейджинговал на диск, поэтому я его убил.
Лучший метод, который я нашел для больших файлов, - это использовать IO.StreamReader для загрузки файла с диска и подсчета каждой строки с использованием переменной. Это позволяет использовать память до очень разумного 25 МБ и намного быстрее, занимает около 30 секунд, чтобы подсчитывать строки в 1 ГБ файле или пару минут для файла размером 6 ГБ. Он никогда не съедает необоснованные объемы ОЗУ, независимо от того, насколько большой ваш файл:
[int]$LinesInFile = 0
$reader = New-Object IO.StreamReader 'c:\filename.csv'
while($reader.ReadLine() -ne $null){ $LinesInFile++ }
Вышеприведенный фрагмент может быть вставлен везде, где вы бы использовали get-content или measure-object, просто обратитесь к переменной $LinesInFile, чтобы получить количество строк в файле.
Обычно (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
Вы можете попробовать
(Import-Csv C:\Directory\file.csv).count
или
$a=Import-Csv C:\Directory\file.csv
$a.count
(Import-Csv C:\Directory\file.csv).count
является единственным точным из них.
Я попробовал все другие предложения на csv с 4781 строками, и все, кроме этого, возвратили 4803.