tsort.awk 751 B

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