Przejdź do głównej zawartości

tsort


  • tsort – narzędzie realizujące sortowanie topologiczne grafu skierowanego acyklicznego (DAG) na podstawie par relacji „poprzednik → następnik”.
  • Używane do ustalania kolejności przetwarzania obiektów, które mają między sobą zależności (np. w kompilatorach, skryptach budujących, przetwarzaniu danych).
  • Część pakietu GNU coreutils, dostępna na większości dystrybucji Linuksa oraz w systemach UNIX/BSD.

Okno terminala
tsort [PLIK]
  • Bez argumentu – czyta dane z stdin.
  • Wspólne przełączniki globalne: --help, --version.

ParametrOpis
PLIKPlik zawierający listę par wierzchołków (po jednym lub więcej wierszy), opisujących krawędzie grafu.
--helpWyświetla pomoc.
--versionWyświetla wersję programu.

Okno terminala
# 1) Proste sortowanie topologiczne
cat <<EOF | tsort
a b
b c
a c
EOF

Efekt: zwróci kolejność a, b, c zgodną z zależnościami.

Okno terminala
# 2) Dane z pliku
cat zaleznosci.txt
# a b
# b d
# a c
tsort zaleznosci.txt

Efekt: kolejność spełniająca wszystkie zależności z pliku.

Okno terminala
# 3) Użycie w potoku do wyznaczenia kolejności budowania
find src -type f -name '*.dep' | xargs cat | tsort

Efekt: ustala kolejność kompilacji plików źródłowych w oparciu o ich zależności.


  • Format wejścia: dane to lista par elementów; każda para oznacza krawędź „pierwszy poprzedza drugi”. Liczba wierszy musi być parzysta.
  • Cykl w grafie: jeśli dane zawierają cykl, tsort zakończy działanie z komunikatem o błędzie.
  • Brak duplikatów: powtarzające się krawędzie są ignorowane.
  • Bez etykietowania: tsort traktuje dane jako ciągi znaków rozdzielane białymi znakami, nie interpretuje ich semantycznie.

Błąd / KomunikatPrzyczynaRozwiązanie
tsort: input contains a loop:W danych wejściowych występuje cykl.Usuń lub zmodyfikuj zależności, aby graf był acykliczny.
tsort: odd number of fieldsNieparzysta liczba słów w danych wejściowych.Upewnij się, że dane zawierają kompletne pary poprzednik następnik.
Brak wynikuBrak danych wejściowych lub graf pusty.Podaj pary wierzchołków opisujące zależności.