Считайте строки быстро

1096
msh210

Я использую Windows 7 и у меня есть GnuWin32. У меня есть текстовый файл объемом несколько гигабайт с \nокончанием строки LF ( ). Я хочу знать, сколько у него строк (или, наоборот, сколько у него LF, скажем, на один меньше, но мне все равно). Какой самый быстрый или наименее дорогой способ получить мой ответ?

Некоторые возможности (хотя я уверен, что мне не хватает некоторых):

  • wc -l foo
  • grep -c $ foo-c, печатает только количество совпадающих строк)
  • grep -c ^^ foo (первая каретка избегает второй)
  • sed -n $= foo( -nпредотвращает печать строки; $ограничивается последней строкой; =печатает номер строки)

(Это утилиты GnuWin32. Я не знаю ни одного встроенного способа для Windows.)

2
Мой ответ дает ряд других возможностей. Я дам вам время и расскажу всем, какой самый быстрый;) DavidPostill 8 лет назад 0
Вы пришли к каким-либо выводам? DavidPostill 8 лет назад 0

2 ответа на вопрос

3
DavidPostill

Решение для командной строки Windows

type foo | find "" /v /c 

Решения Powershell

(get-content foo | measure-object -line).lines  (dir foo | select-string .).count  (type foo).count  (gc foo | measure-object | select count).count 

Perl Solution

perl -pe '}{$_=$.' foo 

awk решение

awk 'END { print NR }' foo 

дальнейшее чтение

0
Chibueze Opata

Самым быстрым для меня является командная строка: find /v /c "" foo.txt

Мне еще предстоит сделать правильный тест, но я попробовал typeи (get-content foo | measure-object -line)для файла 10 ГБ на оперативном сервере 2 ГБ, но они заняли слишком много времени для завершения. Найти однако вернулся достаточно быстро

Вы предлагаете решение, которое уже предложено. Пожалуйста, платите ответ, только если он предоставляет дополнительную информацию. Вы сравнили несколько способов? Какие? Каков был результат? Каким был ваш тест? ... Máté Juhász 5 лет назад 1
@ MátéJuhász Я не нашел его в другом месте, команда `find` отличается от` type`. Опубликовано в спешке, но обновит ответ с более подробной информацией. Chibueze Opata 5 лет назад 0