cat /proc/modules | awk -v "module=$1" ' function find_related_modules(mod, i, a) { modules[mod] = deps[mod] split(deps[mod], a, ",") for (i in a) { if (a[i] == "") continue if (!modules[a[i]]) { modules[a[i]] = deps[a[i]] find_related_modules(a[i]) } } } function top_sort(modules, i, j) { changed = 1 while (changed) { changed = 0 for(i in modules) { if (modules[i] == "") { print i delete modules[i] for (j in modules) { sub("^"i",", "", modules[j]) sub(","i",", ",", modules[j]) } changed = 1 } } } } BEGIN { have_module = 0 } { if ($4 != "-") deps[$1] = $4 if ($1 == module) have_module = 1 } END { if (have_module == 1) { find_related_modules(module) # puts results into "modules" array top_sort(modules) } } '