Kiedyś comm
, aby porównać dwa posortowane pliki. Każda linia w tych plikach jest dodatnimi liczbami całkowitymi. Ale wyniki pokazują
comm: file 1 is not in sorted order
comm: file 2 is not in sorted order
Skąd bierze się błąd, nawet jeśli te dwa pliki są posortowane?
sort
comm
numeric-data
wenzi
źródło
źródło
Odpowiedzi:
comm
wymaga sortowania leksykograficznego (zwykłegosort
), a nie sortowania numerycznego (sort -n
). Na przykład chce mieć następującą kolejność:Nie w następującej kolejności:
Napraw to, a problem powinien zniknąć. Dla bardziej ezoterycznych przypadkach
comm
„s locale może być inna niżsort
lokalizacji, może chcesz uruchomićsort
icomm
zeLC_COLLATE=C
w ich środowisku użyć natywną kolejność bajtów.źródło
sort -n
sort
z , i bez z-n
przełącznikiem i pokazuje tylko z tym-n
przełącznikiem można osiągnąć prawidłowe zwiększając zamówienie kiedy uznają to jest wymagane w swoim własnym odpowiedź.comm
dosłownie wymagaLC_COLLATE
zamówienia. Wystarczy powiedzieć, że błędy w odpowiedzi nie są czysto kosmetyczne w przypadku przykładów spoza zestawu testowego ... nikt nie prosił o pozytywne sortowanie numeryczne.ZAKTUALIZOWANA ODPOWIEDŹ:
PROBLEM:
OP otrzymuje komunikat o błędzie „ plik nie jest posortowany ” podczas
comm
porównywania dodatnich liczb całkowitych w plikach, a nie w tekście. Mamy więc do czynienia z liczbami nie dziesiętnymi.Krótka odpowiedź:
W zależności od użycia
-n
przełącznika zsort
poleceniem użytym do sortowania dostarczonych wynikówcomm
kolejność zwracanych wynikówcomm
może być bardzo różna:Lexograficzne : użycie
-n
przełącznika z sortowaniem spowoduje uporządkowanie „dodatnich liczb całkowitych” w szeregu rosnących liczb. „ Błąd ” można stłumić za pomocącomm
przełącznika „s”--nocheck-order
Kolejność bajtów : NIE ma zastosowania
-n switch
zsort
.LC_COLLATE
określa kolejność, która może nawet różnić się w zależności od sposobulocale
ustawienia na hoście, na którym wykonywane jest polecenie. Jest to dane wejściowecomm
domyślnie oczekiwane. Więcej informacji na ten tematLC_COLLATE
można znaleźć tutaj: Reference1 i Reference2Czy błąd jest problemem? To zależy od tego, co próbujesz osiągnąć. Jak zobaczymy w poniższych przykładach,
comm
zwraca te same wyniki po porównaniu plików z przełącznikiem`slub bez , chociaż ich kolejność będzie się różnić w powyższy sposób, w zależności od tego, czyjest używany zpoleceniem. Ja wolę uporządkowane wyniki „leksykalne” - liczby, które rosną w szeregu.sort
-n
-n switch
sort
Jeśli jednak nie chcesz wyników w kolejności „ leksykalnej ”, NIE używaj
-n
przełącznika do sortowania dostarczonych danych docomm
porównania.TESTOWANIE:
Porównamy wyniki
comm
polecenia z-n
przełącznikiem i bez niego . Zwiększyłem złożoność mojego zestawu danych testowych na żądanie Kusalanandy:Dane testowe :
plik1.txt :
plik2.txt :
Skrzyżowanie :
Wymień tylko liczby wspólne dla OBU plików
Bez
-n
przełącznika:Wyniki : poprawne, ale zwrócone w niesortowanej kolejności
Z
-n
przełącznikiem:Wyniki : Prawidłowe, ale zwrócone w kolejności posortowanej LEXOGRAFICZNIE . Operacja zakończyła się pomyślnie i zwróciła takie same wyniki jak użycie
comm
bez-n
przełącznika, ale na posortowanej liście.Różnica :
Wymień tylko liczby unikalne dla każdego pliku:
Bez
-n
przełącznika:Wyniki : Prawidłowo - liczby te są rzeczywiście wyłączne dla każdego odpowiedniego pliku.
Z
-n
przełącznikiem:Wyniki : Prawidłowe, takie same wyniki jak
comm
bez-n
przełącznika, ale zwraca błąd dotyczący kolejności sortowania liczb całkowitych dodatnich w samych plikach.ROZWIĄZANIE DLA WYNIKÓW LEKOGRAFICZNYCH:
Użyj przełącznika
comm
`s,--nocheck-order
aby ukryć komunikat o błędzie. Ponieważ wiemy, że liczby nie są sortowane w każdym pliku, ale wyniki zwracane przezcomm -n
są poprawne, błąd można bezpiecznie zignorować, pomijając go:Skrzyżowanie :
Różnica :
WNIOSEK:
Błąd „ plik nie jest posortowany ”, gdy zwracane są posortowane dodatnie liczby całkowite
comm
, nie oznacza, że wyniki zwrócone za pomocą-n
przełącznikacomm
są nieprawidłowe. Rzeczywiście, użyciecomm -n
zwróci porządek w uporządkowanej kolejności!Dzięki @dhag, @kusalananda @ChrisDown za zgłaszanie problemów wymagających dalszego rozszerzenia. Zawsze cieszę się z przeglądu mojej pracy: jedynym sposobem na poprawę sytuacji jest ciągły nacisk i wyzwanie ze strony naszych rówieśników.
źródło