tsort.awk 695 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #!/usr/bin/awk -f
  2. # Generate topologically sorted list of manual chapters.
  3. # Copyright (C) 1998-2026 Free Software Foundation, Inc.
  4. BEGIN {
  5. cnt = 0
  6. dnt = 0
  7. }
  8. {
  9. to[dnt] = $1
  10. from[dnt] = $2
  11. ++dnt
  12. all[cnt++] = $1
  13. }
  14. END {
  15. do {
  16. moved = 0
  17. for (i = 0; i < dnt; ++i) {
  18. for (j = 0; j < cnt; ++j) {
  19. if (all[j] == from[i]) {
  20. for (k = j + 1; k < cnt; ++k) {
  21. if (all[k] == to[i]) {
  22. break;
  23. }
  24. }
  25. if (k < cnt) {
  26. for (l = k - 1; l >= j; --l) {
  27. all[l + 1] = all[l]
  28. }
  29. all[j] = to[i]
  30. break;
  31. }
  32. }
  33. }
  34. if (j < cnt) {
  35. moved = 1
  36. break
  37. }
  38. }
  39. } while (moved)
  40. for (i = 0; i < cnt; ++i) {
  41. print all[i];
  42. }
  43. }