Я работаю под управлением Windows 7 и GnuWin32. У меня есть текстовый файл размером в несколько гигабайт с \n
окончаниями строк LF ( ). Я хочу узнать, сколько в нем строк (или, как вариант, сколько в нем LF, что, скажем, на одну меньше, но мне все равно). Какой самый быстрый или наименее затратный способ получить мой ответ?
Вот несколько возможностей (хотя я уверен, что некоторые из них я упускаю):
wc -l foo
grep -c $ foo
(с-c
, печатает только количество совпадающих строк)grep -c ^^ foo
(первый курсор обходит второй)sed -n $= foo
(-n
предотвращает печать строки;$
ограничивается последней строкой;=
печатает номер строки)
(Это утилиты GnuWin32. Я не знаю ни одного встроенного в Windows способа.)
решение1
Решение командной строки 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
perl -pe '}{$_=$.' foo
решение awk
awk 'END { print NR }' foo
дальнейшее чтение
- Индекс AZ командной строки Windows CMD- Отличный справочник по всем вопросам, связанным с командной строкой Windows.
- находить- Поиск текстовой строки в файле и отображение всех строк, где она найдена.
- Алфавитный указатель команд Windows PowerShell- Отличный справочник по всему, что связано с PowerShell.
решение2
Для меня самым быстрым является командная строка:find /v /c "" foo.txt
Мне еще предстоит провести надлежащий бенчмарк, но я пробовал type
и (get-content foo | measure-object -line)
для файла 10 ГБ на сервере с 2 ГБ оперативной памяти, но они заняли слишком много времени для завершения. Find, однако, вернулся достаточно быстро