$ cat tmp/example.awk
{
a[$1]++
} END {
for (i in a) {
dir=i; gsub(" ", "\\ ", dir) ;
printf "echo %s: %d; cd %s; ls -1 *htm; cd ->/dev/null; echo\n", \
i, a[i], dir, dir
}
}
Образец вывода:
find . -iname "*.htm" -printf "%h\t%f\n" |sort |\
awk -F'\t' -f tmp/example.awk |sh
(...)
./fpsu/applikasjon/kjerne/lib: 1
xom-1.0b5.htm
./tmp/refcp/refcp/home/jaroslav/reference/programing/input-processing: 1
Capitalizing+personal+names.htm
./Downloads/index files: 3
allclasses-frame.htm
overview-frame.htm
overview-summary.htm
./tmp/refcp/refcp/home/jaroslav/reference/code/html-css/common-web-fonts_files: 6
hostedbadge_002.htm
hostedbadge_003.htm
hostedbadge.htm
like_002.htm
like_003.htm
like.htm
(...)
Первым шагом является печать каждой папки и имени файла с заданным расширением. Это достигается с помощью аргументов% h% t для поиска printf.
Следующим шагом является подсчет каждой записи в данной папке с [$ 1]++ в программе awk. То есть для каждой напечатанной строки мы увеличиваем запись массива с индексом, равным имени найденного каталога, содержащего файлы с заданным суффиксом.
Когда все записи подсчитаны, мы выводим простую команду оболочки для печати результатов и перечисления файлов в каждом каталоге, который мы нашли.
В результате получается список команд оболочки, которые мы передаем в sh
.