it-swarm-ru.tech

считать строки в файле

Я уверен, что есть много способов сделать это: как подсчитать количество строк в текстовом файле?

$ <cmd> file.txt
1020 lines
75
Chris Smith

Стандартным способом является wc, который принимает аргументы для указания того, что он должен считать (байты, символы, слова и т.д.); -l для строк:

$ wc -l file.txt
1020 file.txt
109
Michael Mrozek

Как сказал Майкл, wc -l это путь. Но на тот случай, если у вас по необъяснимым причинам есть bash, Perl или awk, но не wc, вот еще несколько решений:

Bash-только

$ LINECT=0; while read -r LINE; do (( LINECT++ )); done < file.txt; echo $LINECT

Perl Solutions

$ Perl -lne 'END { print $. }' file.txt

и гораздо менее читаемый:

$ Perl -lne '}{ print $.' file.txt

Awk Solution

$  awk 'END {print NR}' file.txt
17
Steven D

Стивен Д забыл GNU sed:

sed -n '$=' file.txt

Кроме того, если вы хотите рассчитывать без вывода имени файла и используете wc:

wc -l < file.txt

Просто ради этого:

cat -n file.txt | tail -n 1 | cut -f1
16

Слово предупреждения при использовании

wc -l

потому что wc -l функционирует путем подсчета\n, если последняя строка в вашем файле не заканчивается новой строкой, то счетчик строк будет отключен на 1. (следовательно, старое соглашение оставляет символ новой строки в конце вашего файла)

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

sed -n $= filename
Perl -lne 'END { print $. }' filename
awk 'END {print NR}' filename
grep -c '' filename
11
pretzels1337

В случае, если у вас есть только bash и абсолютно отсутствуют внешние инструменты, вы также можете сделать следующее:

count=0
while read
do
  ((count=$count+1))
done <file.txt
echo $count

Объяснение: цикл читает строку стандартного ввода построчно (read; поскольку мы ничего не делаем с вводом для чтения, переменная для его сохранения не предусмотрена), и каждый раз увеличивает переменную count , Из-за перенаправления (<file.txt после done) стандартным вводом для цикла является file.txt.

3
celtschk

Вы всегда можете использовать команду grep следующим образом:

grep -c "^" file.txt

Он будет считать все фактические строки file.txt, содержит ли последняя строка символ LF в конце).

2
Paolo