Как считать строки в документе?

575

У меня есть строки, подобные этим, и я хочу знать, сколько строк у меня на самом деле...

09:16:39 AM  all    2.00    0.00    4.00    0.00    0.00    0.00    0.00    0.00   94.00
09:16:40 AM  all    5.00    0.00    0.00    4.00    0.00    0.00    0.00    0.00   91.00
09:16:41 AM  all    0.00    0.00    4.00    0.00    0.00    0.00    0.00    0.00   96.00
09:16:42 AM  all    3.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00   96.00
09:16:43 AM  all    0.00    0.00    1.00    0.00    1.00    0.00    0.00    0.00   98.00
09:16:44 AM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
09:16:45 AM  all    2.00    0.00    6.00    0.00    0.00    0.00    0.00    0.00   92.00

Есть ли способ подсчитать их все с помощью команд Linux?

  • 4
    Откройте файл, используя vim, затем введите g <Ctrl-g> , он покажет вам количество строк, слов, столбцов и байтов
  • 12
    @ Luv33preet, тогда ты просто возвращаешься на ТА, разыскиваешь, как выйти из vim
Показать ещё 1 комментарий
Теги:
scripting
command-line

18 ответов

1152
Лучший ответ

Используйте wc:

wc -l <filename>

Это выведет количество строк в <filename>:

$ wc -l /dir/file.txt
3272485 /dir/file.txt

Или, чтобы опустить <filename> из результата, используйте wc -l < <filename>:

$ wc -l < /dir/file.txt
3272485

Вы также можете передавать данные на wc:

$ cat /dir/file.txt | wc -l
3272485
$ curl yahoo.com --silent | wc -l
63
  • 16
    это замечательно!! вы можете использовать awk, чтобы избавиться от имени файла, добавляемого к номеру строки, следующим образом: wc -l <file> | awk '{print $1}
  • 69
    Еще короче, вы можете сделать wc -l < <filename>
Показать ещё 10 комментариев
101

Чтобы подсчитать все строки, используйте:

$ wc -l file

Чтобы фильтровать и подсчитывать только строки с использованием шаблона:

$ grep -w "pattern" -c file  

Или используйте -v для инвертирования соответствия:

$ grep -w "pattern" -c -v file 

Посмотрите страницу man grep, чтобы посмотреть на аргументы -e, -i и -x...

  • 0
    Как ни странно, иногда у меня лучше работает grep -c . Главным образом из-за wc -l раздражающего префикса пробела «feature».
61
wc -l <file.txt>

или

command | wc -l
37

существует много способов. использование wc является одним.

wc -l file

другие включают

awk 'END{print NR}' file

sed -n '$=' file (GNU sed)

grep -c ".*" file
  • 2
    Да, но wc -l file дает вам количество строк и имя файла, чтобы получить только имя файла, которое вы можете сделать: filename.wc -l < /filepath/filename.ext
  • 0
    Используя GNU аргумент grep -H возвращает имя файла и количество. grep -Hc ".*" file
19

Инструмент wc является "счетчиком слов" в UNIX и UNIX-подобных операционных системах, вы также можете использовать его для подсчета строк в файле, добавив параметр -l, поэтому wc -l foo будет считать количество строк в foo. Вы также можете выводить вывод из программы следующим образом: ls -l | wc -l, который расскажет вам, сколько файлов находится в текущем каталоге.

  • 2
    ls -l | wc -l самом деле даст вам количество файлов в каталоге +1 для строки общего размера. вы можете сделать ls -ld * | wc -l чтобы получить правильное количество файлов.
18

Используйте wc:

wc -l <filename>
12

Если вы хотите проверить общую строку всех файлов в каталоге, вы можете использовать find и wc:

find . -type f -exec wc -l {} +
8

Если все, что вам нужно, это количество строк (а не число строк и глупое имя файла):

wc -l < /filepath/filename.ext

Как упоминалось ранее, они также работают (но хуже по другим причинам):

awk 'END{print NR}' file       # not on all unixes
sed -n '$=' file               # (GNU sed) also not on all unixes
grep -c ".*" file              # overkill and probably also slower
  • 3
    Этот ответ был опубликован через 3 года после того, как был задан вопрос, и он просто копирует другие. Первая часть тривиальна, а вторая - добавлен ответ всего призрака . Downvoting.
  • 0
    4 года спустя. Давайте посмотрим, сможем ли мы получить десятилетнюю полосу пониженных голосов!
Показать ещё 1 комментарий
7

Используйте nl следующим образом:

nl filename

От man nl:

Напишите каждый FILE на стандартный вывод, добавив номера строк. С ни FILE, ни когда FILE -, прочитайте стандартный ввод.

  • 0
    Это первый ответ, который я нашел, который работает с файлом, который имеет одну строку текста, которая не заканчивается новой строкой, которую wc -l сообщает как 0. Спасибо.
4

Я использовал это:

cat myfile.txt | wc -l

Я предпочитаю его по принятому ответу, потому что он не печатает имя файла, и вам не нужно использовать awk, чтобы исправить это. Принятый ответ:

wc -l myfile.txt

Но я думаю, что лучший из них - ответ GGB667:

wc -l < myfile.txt

Я, вероятно, буду использовать это с этого момента. Это немного короче моего пути. Я использую свой старый способ сделать это, если кто-то предпочитает это. Результат одинаковый с этими двумя методами.

  • 3
    первый и последний метод одинаковы. последний лучше, потому что он не порождает дополнительный процесс
3

Я видел этот вопрос, пока искал способ подсчета нескольких строк файлов, поэтому, если вы хотите подсчитать несколько строк файла .txt, вы можете сделать это,

cat *.txt | wc -l

он также будет работать в одном .txt файле;)

3
wc -l file.txt | cut -f3 -d" "

Возвращает только количество строк

3

Выше - предпочтительный метод, но команда "cat" также может быть полезной:

cat -n <filename>

Покажет вам весь контент файла с номерами строк.

2

Перенаправление/Выполнение вывода файла на wc -l должно быть достаточным, например:

cat /etc/fstab | wc -l

который затем предоставит no. только строк.

1
cat file.log | wc -l | grep -oE '\d+'
  • grep -oE '\d+': Чтобы вернуть цифры ТОЛЬКО.
1

Я только что сделал программу для этого (с node)

npm install gimme-lines
gimme-lines verbose --exclude=node_modules,public,vendor --exclude_extensions=html

https://github.com/danschumann/gimme-lines/tree/master

  • 4
    Разве это не похоже на использование F16 для уничтожения сорняков в саду?
0

Я знаю, что это старый, но все же: Отфильтрованные строки

Мой файл выглядит так:

Number of files sent
Company 1 file: foo.pdf OK
Company 1 file: foo.csv OK
Company 1 file: foo.msg OK
Company 2 file: foo.pdf OK
Company 2 file: foo.csv OK
Company 2 file: foo.msg Error
Company 3 file: foo.pdf OK
Company 3 file: foo.csv OK
Company 3 file: foo.msg Error
Company 4 file: foo.pdf OK
Company 4 file: foo.csv OK
Company 4 file: foo.msg Error

Если я хочу знать, сколько файлов отправлено ОК:

grep "OK" <filename> | wc -l

ИЛИ

grep -c "OK" filename
0

Как говорили другие, wc -l - лучшее решение, но для дальнейшего использования вы можете использовать Perl:

perl -lne 'END { print $. }'

$. содержит номер строки и блок END будет выполняться в конце script.

  • 1
    Не работает: dir | perl -lne 'END { print $. }' Can't find string terminator "'" anywhere before EOF at -e line 1.'
  • 1
    @VeikkoW работает на меня. Если вы работаете в Windows, применяются другие правила цитирования; но ОП спросил о Linux / Bash.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню