Co to jest rozsądny limit skalowalności „sort -u”? (w wymiarach „długość linii”, „ilość linii”, „całkowity rozmiar pliku”?)
Jaka jest uniksowa alternatywa dla plików przekraczających ten wymiar w zakresie „ilości linii”? (Oczywiście, że mogę z łatwością je wdrożyć, ale zastanawiałem się, czy można coś zrobić za pomocą kilku standardowych poleceń Linuksa?)
uniq
przedsort -u
pomaga. BTW, dane ASCIILC_ALL=C sort
przyspieszają GNUsort
okropnie dużo (zobacz tę odpowiedź )Odpowiedzi:
To
sort
, co znajdziesz w Linuksie, pochodzi z pakietu coreutils i implementuje scalenie External R-Way . Dzieli dane na części, które może obsługiwać w pamięci, przechowuje je na dysku, a następnie łączy. Fragmenty są wykonywane równolegle, jeśli maszyna ma do tego odpowiednie procesory.Więc jeśli miałby istnieć limit, to wolne miejsce na dysku, które
sort
można wykorzystać do przechowywania plików tymczasowych, które musi scalić, w połączeniu z wynikiem.źródło
sort -o file file
)Nie mogę mówić o implementacjach specyficznych dla dostawcy, ale
UNIX sort
implementacja dzieli duże pliki na mniejsze pliki, sortuje te pliki, a następnie łączy posortowane mniejsze pliki w zagregowane posortowane dane wyjściowe.Jedynym ograniczeniem jest miejsce na dysku dla mniejszych plików utworzonych pośrednio
sort
, ale pliki można przekierować do dowolnego katalogu, ustawiając zmienną środowiskowąTMPDIR
.źródło
man largefile
wyświetla listęsort
jako dużych plików.sort
? A może jakaś pochodna jakiejś wersji systemu AT&T Unix? Czy jakaś certyfikowana wersja Uniksasort
(jak GNUsort
na OS / X)?sort
implementacji w odniesieniu do wielobajtowych znaków może być różna, fakt, żesort
używa podzielonych plików pośrednich jest wspólny dla wszystkich implementacji UNIX opartych na oryginalnym kodzie. BTW: wersja Solaris to OSS jako „OpenSolaris”, patrz sourceforge.net/p/schillix-on/schillix-on/ci/default/tree/usr/…Na podstawie https://blog.mafr.de/2010/05/23/sorting-large-files/ i /unix//a/88704/9689 :
Aktualizacja:
Z powyższych odpowiedzi widzimy, że
sort
już robi to, o czym wspominał fragment - tj. Zewnętrzne scalenie R-Way . W końcu działa tylko:Powinno wystarczyć.
Moje obecne założenia (bez sprawdzania kodu) dotyczące limitów to:
(Ta odpowiedź jest oznaczona jako wiki społeczności - zachęcamy do jej poprawy! :))
źródło
sort
Domyślnie GNU sortuje równolegle (od 2010 r. Po tej stronie, do której prowadzi link),--parallel
należy zmniejszyć liczbę współbieżnych wątków zamiast pozwalać nasort
określenie optymalnego. Sortowanie już dokonuje wewnętrznego podziału i łączenia w bardziej efektywny sposób. Wątpię, czy to dodatkowe rozdzielenie pomoże.