Как узнать, сколько строк содержит текстовый файл, не просматривая его?

Как узнать, сколько строк содержит текстовый файл, не открывая файл в редакторе или приложении для просмотра? Есть ли удобная консольная консоль Unix для просмотра номера?

Действительно есть. Он называется wc , изначально для подсчета слов, я считаю, но он может делать строки, слова, символы, байты (и с некоторыми реализациями, длина в байтах самой длинной строки или ширина экрана самого широкого). Опция -l указывает, что она подсчитывает строки (по сути, она подсчитывает символы новой строки, поэтому только правильно разграниченные строки):

 wc -l mytextfile 

Или просто выводить количество строк:

 wc -l < mytextfile 

(будьте осторожны, что некоторые реализации вставляют пробелы до этого числа).

Другой вариант – использовать grep для поиска количества совпадений шаблона:

 grep --regexp="$" --count /path/to/myfile.txt 

В этом примере,

  • $ – выражение, которое вычисляет новую строку (нажата кнопка ввода)
  • --count подавляет нормальный выход совпадений и отображает количество совпадений.
  • /path/to/myfile.txt довольно очевиден, надеюсь 🙂

EDIT: Как упоминалось в комментариях @hesse, это можно сократить до

 grep -c $ path/to/file 

Это также сделает его стандартным и переносимым для не-GNU grep реализаций.

Я бы также добавил, что это довольно легко сделать в чистом awk если вы по какой-то причине не хотели использовать wc .

 $ awk 'END { print NR }' /path/to/file 

Вышеприведенная print содержит количество записей ( NR ), присутствующих в файле в /path/to/file .

Примечание : в отличие от wc , это не будет печатать имя файла. Итак, если вам нужен только номер, это будет хорошей альтернативой cat file | wc -l cat file | wc -l .

Как предложил @Kevin, вы можете использовать команду wc для подсчета строк в файле. Однако wc -l test.txt будет включать имя файла в результат. Вы можете использовать:

 wc -l < test.txt 

просто получить количество строк без имени файла в нем. Попробуйте.

Согласно моему тесту, я могу проверить, что AWK быстрее, чем другие инструменты (GREP, SED, AWK, PERL, WC)

Вот результат теста, который я провел здесь

 date +%x_%H:%M:%S; grep -c $ my_file.txt; date +%x_%H:%M:%S; 

10/03 / 16_09: 41: 51 24579427 10/03 / 16_09: 42: 40 ~ 49 секунд

 date +%x_%H:%M:%S; wc -l my_file.txt; date +%x_%H:%M:%S; 

10/03 / 16_09: 35: 05 24579427 my_file.txt 10/03 / 16_09: 35: 45 ~ 40 секунд

 date +%x_%H:%M:%S; sed -n '$=' my_file.txt; date +%x_%H:%M:%S; 

10/03 / 16_09: 33: 50 24579427 10/03 / 16_09: 34: 29 ~ 39 секунд

 date +%x_%H:%M:%S; perl -ne 'END { $_=$.;if(!/^[0-9]+$/){$_=0;};print "$_" }' my_file.txt; date +%x_%H:%M:%S; 

10/03 / 16_09: 36: 11 24579427 10/03 / 16_09: 36: 36 ~ 25 секунд

 date +%x_%H:%M:%S; awk 'END { print NR }' my_file.txt; date +%x_%H:%M:%S; 

10/03 / 16_09: 43: 36 24579427 10/03 / 16_09: 43: 58 ~ 22 секунды