Powershell Count очень большой файл - PullRequest
0 голосов
/ 26 февраля 2019

У меня очень большой текстовый файл размером 250 ГБ, предоставленный нам поставщиком.Они также дают нам контрольный файл, который должен иметь количество строк в большом файле.Иногда происходит несоответствие.Как мне считать строки в Powershell?Я попробовал эту команду, и она выполнялась более получаса и еще не была завершена.

Get-content C:\test.txt | Measure-Object –Line

(gc C:\test.txt | Measure-object | select count).count

Любая помощь приветствуется Спасибо MR

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Для такого огромного файла я бы предпочел использовать некоторую утилиту, написанную на Си.Установите gitbash, он должен иметь команду wc:

wc -l yourfile.txt

Я тестировал его на строчном файле 5 ГБ / 50 МБ (на жестком диске), это заняло около 40 с.Лучшее решение PowerShell заняло около 2 минут.Вы также можете проверить свой файл, он может иметь некоторые автоинкрементные индексы или постоянный размер строки.

0 голосов
/ 26 февраля 2019

Если производительность имеет значение, избегайте использования командлетов и конвейера;use switch -File:

$count = 0
switch -File C:\test.txt {
  default { ++$count }
}

switch -File перечисляет строки указанного файла;условие default соответствует любой строке.


Чтобы понять разницу в производительности:

# Create a sample file with 100,000 lines.
1..1e5 > tmp.txt
# Warm up the file cache
foreach ($line in [IO.File]::ReadLines("$pwd/tmp.txt")) { }

(Measure-Command { (Get-Content tmp.txt | Measure-Object).Count }).TotalSeconds

(Measure-Command { $count = 0; switch -File tmp.txt { default { ++$count } } }).TotalSeconds

Пример результатов с моего компьютера с Windows 10 / PSv5.1:

1.3081307  # Get-Content + Measure-Object
0.1097513  # switch -File

То есть на моей машине команда switch -File была примерно в 12 раз быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...