Среднее количество подэлементов

У меня есть каталог, который содержит несколько поддиректоров. Каждый из этих поддиреев снова содержит несколько поддиректоров (назовем их subsubdirs). Теперь я хотел бы подсчитать среднее количество подпункций в каталоге верхнего уровня.

Этот скрипт использует awk для извлечения подкаталогов из списка ls. Каждый подкаталог вводится и подсчитываются подкаталоги. Наконец, средний расчет использует dc. Я установил dc (используя 2 k ) для вывода в 2 десятичных знака.

 dirs=$(ls -ld * | awk '$1 ~ /^d.*/ { print $9 }') ndirs=0 for d in $dirs do cd $d current_nsubdirs=$(ls -ld * 2>/dev/null | awk '$1 ~ /^d.*/ { print $9 }' | wc -l) nsubdirs=$(($nsubdirs + $current_nsubdirs)) ndirs=$(($ndirs + 1)) cd .. done echo "Total subdirs $ndirs" echo "Total subsubdirs $nsubdirs" avg=$(dc <<< "2 k $nsubdirs $ndirs / p") echo "Average subsubdirs $avg" 

Вы можете ограничить шаблон glob каталогами, добавив / в конец. Таким образом, */ расширяется до каталогов в текущем каталоге (исключая те, чье имя начинается с точки).

Таким образом, если предположить, что ни одна из каталогов не имеет имени, начинающегося с . (если есть, вам нужно подсчитать их отдельно или настроить оболочку, чтобы их также перечислить):

 set -- */ number_of_subdirectories=$# set -- */*/ number_of_subsubdirectories=$# average_number_of_subsubdirectories_per_directory=$(awk "BEGIN {print $number_of_subsubdirectories / $number_of_subdirectories; exit}")