Как подсчитать текстовые строки?

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

command file.txt

Обратите внимание, что я хочу считать только непустые строки (строки без учета пробелов и вкладок)?. [! ​​d1]

1
задан 19 March 2015 в 16:29

6 ответов

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

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

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

sed '/^[[:blank:]]*$/d' file.txt | wc -l
12
ответ дан 23 May 2018 в 22:16
  • 1
    Я бы использовал ^\s*$, чтобы учесть строки, содержащие только табуляции или пробелы. – Sylvain Pineau 19 March 2015 в 14:46
  • 2
    @SylvainPineau: Добавлено .. – heemayl 19 March 2015 в 14:52
  • 3
    Я согласен с тем, что из вопроса OP не ясно, но текст с пробелами / вкладкой может изменить ожидаемый результат, +1. – Sylvain Pineau 19 March 2015 в 14:55

Использование grep:

grep -vc '^$' file  # or
grep -vc '^\s*$' file    
3
ответ дан 23 May 2018 в 22:16

Вы можете использовать:

grep -cve '^\s*$' file.txt

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

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

Пример:

count_lines file.txt
42
3
ответ дан 23 May 2018 в 22:16

С awk:

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

Объяснение:

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

2
ответ дан 23 May 2018 в 22:16

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

С помощью grep:

grep -v '^$' file.txt | wc -l
1
ответ дан 23 May 2018 в 22:16

Решение 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
ответ дан 23 May 2018 в 22:16

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

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