PowerShell: как подсчитать количество строк в файле csv?

Как подсчитать количество строк в файле csv с помощью powershell? Я попробовал что-то вроде

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

или

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

но это приводит к ошибке.

Ответы

Ответ 1

Соедините его с командлетом Measure-Object

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

Ответ 2

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, чтобы получить количество строк в файле.

Ответ 3

Обычно (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

Ответ 4

Вы можете попробовать

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

или

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

Ответ 5

(Import-Csv C:\Directory\file.csv).count является единственным точным из них.

Я попробовал все другие предложения на csv с 4781 строками, и все, кроме этого, возвратили 4803.