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

Как посчитать, сколько строк в текстовом файле. например:

command file.txt

Заметьте, я хочу подсчитывать только непустые строки (строки без подсчета пробелов и табуляции)?.

14
задан 19 March 2015 в 15:29

7 ответов

Вышеупомянутый ответ корректен, но немного отличается, можно использовать grep к для более легкого кода такой grep -vc '^$' file.txt

Например (A) :file.txt

$grep -vc '^$' file.txt

1    First line         #This is two tabs to comment.
2    
4
3    Fourth line        #Another two tabs to comment.

$2

Например (B) :file.txt

$sed '/^$/d' file.txt | wc -l

1    First line         #This is two tabs to comment.
2    
4
3    Fourth line        #Another two tabs to comment.

$4

Заметьте, что результат равняется 4! когда мы хотим ожидать только два. но это считает вкладки промежуточными содержание и комментарий также.

Заметьте количества от 0 и количества от 1 его различное от grep до sed, как я помню за большее количество поиска деталей grep или sed.

11
ответ дан 19 March 2015 в 15:29

Попробуйте sed:

sed '/^$/d' file.txt | wc -l

, Если у Вас есть какие-либо строки, содержащие только, располагает с интервалами или вкладки и если Вы хотите проигнорировать их также от количества:

sed '/^[[:blank:]]*$/d' file.txt | wc -l
12
ответ дан 19 March 2015 в 15:29

Используя grep:

grep -vc '^ file  # or
grep -vc '^\s* file    
3
ответ дан 19 March 2015 в 15:29

С :

awk 'NF{++count} END{print count}' file

Объяснение:

Эти NF указывает на общее количество полей, и следовательно это печатает только непустые строки , так как в непустых строках NF больше, чем 0 и оценивает к истинному. Так увеличьте флаг количества , когда awk нашел непустые строки и печать последнее значение флаг количества в конце END{print count}.

2
ответ дан 19 March 2015 в 15:29

Можно использовать:

grep -cve '^\s* 

при необходимости в команде для этого, просто вставьте следующие строки в Ваш .bashrc и перезапустите сессию оболочки или откройте новый терминал:

count_lines()
{
    grep -cve '^\s* 

Пример:

count_lines file.txt
42
$1 }

Пример:

count_lines file.txt
42
file.txt

при необходимости в команде для этого, просто вставьте следующие строки в Ваш .bashrc и перезапустите сессию оболочки или откройте новый терминал:

count_lines()
{
    grep -cve '^\s* 

Пример:

count_lines file.txt
42
$1 }

Пример:

count_lines file.txt
42
3
ответ дан 19 March 2015 в 15:29

Редактирование : можно просто добавить c опция к grep вместо того, чтобы передать все по каналу к wc, видеть ответ @muru для более компактной версии

<час>

С grep:

grep -v '^ file.txt | wc -l
1
ответ дан 19 March 2015 в 15:29

Perl решения

для Perl может сделать это. В общем подсчете строки работает так:

$ perl -ne 'END{print $.}' input.txt                                                                                     

, Если мы хотим исключить все пустые строки, мы сделаем что-то вроде этого:

$ perl -ne '$c+=1 if not /^$|^\s+$/;END{print $c}' input.txt                                                             

Скажем, мы ввели файл как это

$ cat -n input.txt
     1  Cat; Dog; Squirrel
     2  ORGANISM Animalus terrus
     3  
     4  Sequence: ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT
     5  

существует 5 общих количеств строк, 2 пустых строки. Команда, которую мы имеем, произвела бы:

$ perl -ne '$c+=1 if not /^$|^\s+$/;END{print $c}' input.txt                                                             
3
<час>

Многофайловое улучшение

Это работает хорошо на единственный файл. Если мы хотим иметь его работающий над несколькими файлами, мы можем сделать что-то вроде этого:

$ perl -ne '$c+=1 if not /^$|^\s+$/;printf("%d %s\n",$c,$ARGV) and $c=0 if eof' input.txt /etc/passwd                    
3 input.txt
52 /etc/passwd
0
ответ дан 20 March 2015 в 01:29

Другие вопросы по тегам:

Похожие вопросы: