PowerShell: как подсчитать количество строк в csv-файле?
Как подсчитать количество строк в csv-файле с помощью powershell? Я попробовал что-то вроде
Get-Content -length "C:Directoryfile.csv"
или
(Get-Content).length "C:Directoryfile.csv"
но это приводит к ошибке.
5 ответов
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.