Сколько строк в каждом файле.
Использование wc
, первоначально для подсчета слов, я считаю, но это может сделать строки, слова, символы, байты и наибольшую длину строки. -l
Опция говорит его подсчет строк.
wc -l <filename>
Это выведет количество строк в:
$ wc -l /dir/file.txt
32724 /dir/file.txt
Вы также можете передать данные в wc
:
$ cat /dir/file.txt | wc -l
32724
$ curl google.com --silent | wc -l
63
Сколько строк в каталоге.
Пытаться:
find . -name '*.pl' | xargs wc -l
еще один вкладыш:
( find ./ -name '*.pl' -print0 | xargs -0 cat ) | wc -l
Кстати, wc
команда считает коды новых строк, а не строк. Если последняя строка в файле не заканчивается кодом новой строки, это не учитывается.
Вы можете использовать grep -c ^, полный пример:
#this example prints line count for all found files
total=0
find /path -type f -name "*.php" | while read FILE; do
#you see use grep instead wc ! for properly counting
count=$(grep -c ^ < "$FILE")
echo "$FILE has $count lines"
let total=total+count #in bash, you can convert this for another shell
done
echo TOTAL LINES COUNTED: $total
Сколько всего строк
Не уверен, что я правильно понял ваш запрос. например, это выведет результаты в следующем формате, показывающем количество строк для каждого файла:
# wc -l `find /path/to/directory/ -type f`
103 /dir/a.php
378 /dir/b/c.xml
132 /dir/d/e.xml
613 total
В качестве альтернативы, для вывода только общего количества символов новой строки без учета количества файлов для файла может пригодиться следующая команда:
# find /path/to/directory/ -type f -exec wc -l {} \; | awk '{total += $1} END{print total}'
613
Самое главное, мне нужно это в «удобочитаемом формате», например. 12,345,678 вместо 12345678
Bash имеет встроенную функцию printf :
printf "%0.2f\n" $T
Как всегда, есть много разных методов, которые могут быть использованы для достижения тех же результатов, упомянутых здесь.
printf
не читает свои аргументыstdin
, а скорее из командной строки (сравните трубопровод сecho
потоком сcat
;cat
читает изstdin
,echo
не читает ). Вместо этого используйтеprintf "$(find ... | xargs ...)"
для предоставления вывода в качестве аргументовprintf
.Во многих случаях объединения
wc
команды и подстановочного знака*
может быть достаточно.Если все ваши файлы находятся в одном каталоге, вы можете позвонить:
Вы также можете перечислить несколько файлов и каталогов:
Эта команда покажет список файлов и их количество строк.
Последняя строка будет суммой строк из всех файлов.
Чтобы подсчитать все файлы в каталоге рекурсивно:
Сначала включите globstar, добавив
shopt -s globstar
в свой .bash_profile. Для поддержки globstar требуется Bash ≥ 4.x, который может быть установленbrew install bash
при необходимости. Вы можете проверить свою версию сbash --version
.Затем запустите:
Обратите внимание, что этот вывод будет неправильным, если globstar не включен.
источник
wc -l **/*
wc: parent_dir/child_dir: read: Is a directory
"Эта команда выдаст список строк кода в каждом каталоге:
источник
Немного опоздал с игрой, но я получил кучу рассуждений об ошибках из-за размера директории. Это сработало для меня:
for i in $(find . -type f); do wc -l $i; done >> /home/counts.txt
источник
cat
объединит файлы в один и выведет все в stdout, вы можете сделать этоwc -l
для общего количества строк файлов в каталоге:источник
Я просто увеличу @malyy ответ для следующего (большой для комментария):
Многие ответы используют
wc
опцию файла командной строки сxargs
. Проблема в том, что xargs ограничен небольшим размером, зависящим от платформы.Кроме того, есть разница между BSD (macOS) и GNU (linux / homebrew)
wc
.GNU one идеален, потому что он может читать список файлов из файла вместо arguments (
--files0
).Если вы работаете на Mac и у вас есть homebrew, вы должны сделать следующее:
Обратите внимание на gwc вместо wc .
источник