Как подсчитать количество строк в текстовом файле. например:
command file.txt
Обратите внимание, что я хочу считать только непустые строки (строки без учета пробелов и вкладок)?. [! d1]
Попробуйте sed:
sed '/^$/d' file.txt | wc -l
Если у вас есть строки, содержащие только пробелы или вкладки, и если вы хотите игнорировать их также из count:
sed '/^[[:blank:]]*$/d' file.txt | wc -l
Использование grep:
grep -vc '^$' file # or
grep -vc '^\s*$' file
Вы можете использовать:
grep -cve '^\s*$' file.txt
Если вам нужна команда для этого, просто вставьте следующие строки в свой .bashrc и перезапустите сеанс оболочки или откройте новый терминал:
count_lines()
{
grep -cve '^\s*$' $1
}
Пример:
count_lines file.txt
42
С awk:
awk 'NF{++count} END{print count}' file
NF указывает общее количество полей, и, следовательно, это печатает только непустые строки, пустые строки NF больше, чем 0 и оценивается как true. Поэтому увеличивайте флаг count, когда awk обнаруживает непустые строки и печатает последнее значение флага count в конце на END{print count}.
Изменить: вы можете просто добавить опцию c к grep вместо того, чтобы передать все на wc, см. ответ @ muru для более компактной версии
С помощью grep:
grep -v '^$' file.txt | wc -l
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