0
Words
0
Characters
0
No spaces
0
Lines
0
Paragraphs
0
Sentences
0 min
Reading time
Lines to sort
Sorted output

Sortowanie linii: posortuj tekst alfabetycznie online

Wklej listę, wybierz porządek, dostajesz ją posortowaną. Z rozróżnianiem wielkości liter lub bez, rosnąco lub malejąco, z natural sort dla nazw plików i ciągów wersji.

Czym jest narzędzie do sortowania linii?

Darmowe narzędzie działające w przeglądarce, które bierze blok tekstu, dzieli go na końcach linii, sortuje linie i oddaje wynik. Bez rejestracji, bez wysyłki, nic nie opuszcza twojej maszyny. Wklej, kliknij, skopiuj.

To odpowiednik wywołania sort w wierszu poleceń, tylko że nie musisz tu walczyć z LC_COLLATE, z faktem, że macOS dostarcza starszego BSD-owego sort, ani z tym, że Windows w ogóle nie ma sort, jeśli nie zainstalujesz Git Bash. Trzy checkboxy pokrywają przypadki, których naprawdę chcesz: rosnąco albo malejąco, z rozróżnianiem wielkości liter albo nie, oraz natural sort, żeby file2 trafił przed file10.

Jeśli kiedykolwiek wkleiłeś listę zależności do package.json i zastanawiałeś się, czemu npm przestawił je przy następnym install, to narzędzie odtwarza dokładnie to, co robi npm 7+, więc diff jest pusty, kiedy odpala CI.

Jak to sort naprawdę działa

Pod maską narzędzie korzysta z API Intl.Collator przeglądarki. Daje to funkcję porównującą świadomą Unicode w sposób, jaki definiuje Unicode Collation Algorithm (UTS #10), a nie surowe porównanie po codepoint. Praktyczna różnica: Intl.Collator wie, że é sortuje się obok e, że niemieckie ß jest na poziomie pierwotnym równe ss, a wielkie i małe litery różnią się dopiero na poziomie tercjarnym.

Sort lexicographic i sort świadomy locale to nie to samo. Czysty sort po codepoint (to, co daje LC_ALL=C sort) ustawia każdą wielką literę przed każdą małą, bo A to U+0041, a a to U+0061. Sort z domyślną collation Unicode przeplata je: A < a < B < b < C. Domyślnie używamy porządku świadomego locale, bo zgadza się on z tym, czego ludzie oczekują po kliknięciu Sort A-Z w Excelu albo Google Sheets. Zaznacz pole rozróżniania wielkości liter, żeby wrócić do porządku w stylu codepoint.

Natural sort to trzecia oś. Włączone, file2.log trafia przed file10.log, bo zagnieżdżone liczby porównywane są jako liczby, a nie znak po znaku. Wikipedia ma czyste wyjaśnienie sortowania naturalnego, jeśli chcesz tła. Implementacja używa opcji numeric: true w Intl.Collator, czyli tej samej prymitywnej operacji, której używa Finder, Eksplorator Windows i nowsze wersje GNU sort -V.

Jak posortować linie w trzech krokach

Jeden panel wejścia, jeden panel wyjścia. Wszystko działa lokalnie; zamknij kartę i twój tekst znika.

  1. 1

    Wklej swoje linie

    Wrzuć listę do edytora, jedna pozycja na linię. Końcowe puste linie są w porządku. Działa zarówno CRLF, jak i LF; wyjście jest normalizowane do LF, chyba że powiesz inaczej. Przycisk Sample wypełnia edytor małą mieszaną listą, jeśli chcesz najpierw zobaczyć wszystkie trzy opcje w akcji.

  2. 2

    Wybierz opcje sortu

    Wybierz Rosnąco albo Malejąco, włącz Rozróżniaj wielkość liter, jeśli potrzebujesz, żeby Apple trafił przed banana, i włącz Natural sort, kiedy w grę wchodzą nazwy plików albo wersje. Usuń puste linie wyrzuca puste wiersze przed sortowaniem; Usuń duplikaty składa powtórzenia w jedno.

  3. 3

    Skopiuj posortowany wynik

    Kliknij Sort. Wynik pojawia się w panelu wyjściowym. Użyj Kopiuj, żeby przenieść do schowka, albo Pobierz, żeby zapisać jako plik .txt. Licznik linii w nagłówku pokazuje, ile wierszy wyszło, co jest przydatne, kiedy włączyłeś dedup i chcesz wiedzieć, ile duplikatów zostało usuniętych.

Kiedy sortowanie linii jest właściwym narzędziem

Sortowanie listy maili przed wysyłką kampanii

Marketing wkleja CSV z mailami subskrybentów do narzędzia kampanijnego, ale lista przyszła w kolejności zapisów. Posortuj ją tu najpierw alfabetycznie, z włączonym brakiem rozróżniania wielkości liter (skoro lokalna część maila w praktyce jest na nią niewrażliwa), potem dedup. Import w narzędziu kampanijnym pójdzie szybciej i od razu wyłapiesz domenę z literówką jak gmial.com, bo siedzi obok prawowitego bloku gmail.com.

Alfabetyzowanie nazw klas CSS lub kolejności atrybutów HTML

Niektóre zespoły wymuszają alfabetyczne nazwy klas w atrybutach class="...", żeby diff PR-ów został czysty. Wklej wartość, posortuj, wklej z powrotem. Ten sam trik działa dla kolejności atrybutów HTML, kiedy linter narzeka, albo do ręcznego sortowania klas utility Tailwind, kiedy nie masz prettier-plugin-tailwindcss zainstalowanego w repo.

Sortowanie .gitignore, żeby przyszłe PR-y miały czysty diff

Plik .gitignore, do którego każdy dopisuje, zamienia się w pakamerę. Posortuj go raz alfabetycznie, zacommituj, i od tego momentu nowe wpisy lądują w oczywistych miejscach, a diff ma sens dla recenzentów. To samo dotyczy .dockerignore, .eslintignore i tablicy files w tsconfig.json, jeśli zespół ją utrzymuje.

Czyszczenie listy TODO wklejonej z czatu

Slack i Discord wklejają listy z dziwną kolejnością, w połowie pustymi liniami i duplikatami od ludzi, którzy powiedzieli to samo dwa razy. Wklej, włącz Usuń puste linie i Usuń duplikaty, posortuj. Dostajesz czystą, uporządkowaną listę do wrzucenia w trackerze zadań.

Sortowanie listy kodów krajów, lotnisk lub walut

Kody krajów ISO 3166, kody lotnisk IATA, kody walut ISO 4217: wszystkie żyją w plikach lookup, którym sortowanie wychodzi na dobre. Natural sort jest tu zbędny, bo kody mają stałą szerokość, ale brak rozróżniania wielkości liter jest ważny, bo niektóre źródła mieszają USD z usd. Posortuj, dedup, wklej z powrotem do tabeli lookup.

Sortowanie listy zależności z package.json

Klucze zależności w package.json są alfabetyzowane przez npm 7+ przy każdym install, ale jeśli edytujesz projekt nadal przypięty do npm 6 (albo yarn 1), kolejność nie zmieni się sama. Wklej klucze zależności, posortuj A-Z, wklej z powrotem. Twój następny PR nie będzie miał commita z przesortowaniem 200 linii nałożonego na właściwą zmianę.

Sortowanie linii: szybka ściąga

Krótka ściąga z opcji sortu, które odsłania to narzędzie, i przypadków brzegowych, które one pokrywają.

TopicWhat this tool does
Lexicographic vs collationSort lexicographic (po codepoint) układa po surowej wartości Unicode: A (U+0041) przed a (U+0061). Sort po collation idzie za Unicode Collation Algorithm i przeplata wielkości liter. To narzędzie używa domyślnie collation; zaznacz Rozróżniaj wielkość liter dla porządku po codepoint.
Wrażliwość na wielkość literDomyślnie niewrażliwy: apple, Apple i APPLE porównują się równo. Przełącz na wrażliwy dla porządku A < a < B < b na tercjarnym poziomie collation albo dla surowego porządku po codepoint w połączeniu z locale C.
Natural sortWłączony, file2 < file10, bo 2 i 10 porównywane są jako liczby. Wyłączony, file10 < file2, bo 1 (U+0031) jest mniejsze niż 2 (U+0032) znak po znaku. Używaj go do nazw plików, ciągów wersji i każdej listy z zagnieżdżonymi liczbami.
Świadomość localeSort respektuje locale strony, więc é układa się obok e we francuskim, niemieckie ä sortuje się jako ae w porządku książki telefonicznej DIN 5007-2 i tak dalej. Unixowe sort robi to samo, jeśli ustawione jest LC_COLLATE; LC_ALL=C sort wraca do porządku po codepoint, jest szybsze, ale traktuje akcenty jak obce litery.
Obsługa pustych liniiPuste linie przy rosnącym sortują się przed dowolną niepustą linią, więc klastrują się u góry. Zaznacz Usuń puste linie, żeby wyrzucić je całkiem. Końcowy znak nowej linii na końcu wejścia jest zachowywany, żeby wyjście robiło round-trip przez cat i podobne narzędzia bez niespodzianek.
StabilnośćSort jest stabilny: linie, które porównują się równo przy twoich ustawieniach, zachowują pierwotną względną kolejność. Liczy się to, kiedy sortujesz po prefiksie albo w trybie niewrażliwym na wielkość liter i chcesz zachować kolejność wejściową w grupie remisowej. Zarówno V8 (Chrome, Edge, Node), jak i SpiderMonkey (Firefox) gwarantują stabilne Array.prototype.sort od 2019.
Końce linii (LF vs CRLF)Wejście jest dzielone na \r\n, \n i \r. Wyjście jest domyślnie łączone \n, żeby ładnie wkleiło się do flow Linuksa i macOS. Jeśli potrzebujesz CRLF dla narzędzia Windows, wklej wynik do edytora świadomego Windows i zapisz z takim końcem linii, jaki chcesz.
KodowanieWejście traktowane jest jako UTF-8 (tekst w przeglądarce jest już zdekodowany). Wiodące UTF-8 BOM jest zachowywane na pierwszej linii, jeśli jest obecne; jeśli chcesz je obciąć, robi to siostrzane narzędzie whitespace-cleaner.

Sortowanie linii: najczęstsze pytania

Jaka jest domyślna kolejność sortu?

Rosnąca, świadoma locale, używająca Intl.Collator przeglądarki z locale strony. Czyli A < a < B < b, tak jak sortują Excel i Google Sheets, a nie surowy porządek po codepoint, w którym każda wielka litera idzie przed każdą małą. Jeśli chcesz porządku po codepoint, zaznacz opcję Rozróżniaj wielkość liter: przełącza ona collator na ścisłe porównanie tercjarnego poziomu i daje tę samą kolejność co LC_ALL=C sort.

Czy sort rozróżnia wielkość liter, czy nie?

Domyślnie nie rozróżnia. Apple, apple i APPLE składają się do tego samego klucza, więc na wyjściu klastrują się razem, a ich względna kolejność to ta, w której pierwsza pojawiła się na wejściu (sort jest stabilny). Zaznacz Rozróżniaj wielkość liter, żeby je rozdzielić; wtedy APPLE, Apple i apple sortują się jako trzy odrębne wartości zgodnie z tercjarnym poziomem domyślnej collation Unicode.

Czy obsługuje natural sort dla nazw typu file2 przed file10?

Tak. Włącz opcję Natural sort, a zagnieżdżone liczby porównywane są jako liczby, więc file2.log trafia przed file10.log, a v1.9 przed v1.10. Implementacja to opcja numeric: true w Intl.Collator, ta sama prymitywna operacja, której Finder na macOS i Eksplorator Windows używają do układania nazw plików.

Czy mogę posortować odwrotnie (Z do A)?

Tak. Wybierz Malejąco w przełączniku porządku. Sort najpierw idzie rosnąco, potem jest odwracany, co zachowuje stabilność między równymi kluczami: jeśli dwie linie porównują się równo przy twoich ustawieniach wielkości liter i natural sort, zachowują pierwotną względną kolejność nawet po odwróceniu. Liczy się to, kiedy sortujesz po częściowym kluczu, jak pierwsza kolumna TSV.

Co dzieje się z duplikatami i pustymi liniami?

Domyślnie zostają oba. Sort jest stabilny, więc duplikaty zachowują pierwotną względną kolejność, a puste linie przy rosnącym klastrują się na górze (sortują się przed dowolnym niepustym ciągiem). Zaznacz Usuń puste linie, żeby wyrzucić je przed sortem, i Usuń duplikaty, żeby zwinąć równe linie do jednej. Do dedykowanego przebiegu dedup z większą liczbą opcji użyj Usuń duplikaty linii.

Czy jest limit rozmiaru?

Do około 100 000 linii działa w przeglądarce w czasie poniżej sekundy. Powyżej 500 000 linii zaczynasz to czuć, głównie dlatego, że renderowanie panelu wyników (a nie sam sort) staje się drogie. Dla plików liczących wiele milionów linii unixowe polecenie sort z LC_ALL=C sort -u file.txt jest szybsze i pracuje out-of-core. Manual sort z GNU coreutils pokrywa flagi, które warto znać.

Prywatność i jak to działa

Twój tekst nigdy nie opuszcza przeglądarki. Podział, porównanie i join działają lokalnie. Brak analityki na twoim wejściu, brak logów, brak rundy do serwera. Samo porównanie to natywny Intl.Collator przeglądarki, który implementuje Unicode Collation Algorithm (UTS #10). Jeśli chcesz lektury w tle, Wikipedia ma solidny przegląd algorytmów sortowania ogólnie.