2015-03-24 9 views
78

Kiedy używamy komendy sort file, plik pokazuje jej zawartość w posortowany sposób, co jeśli nie chcę uzyskać żadnego rodzaju danych wyjściowych, ale plik posortowany?Jak sortować plik w miejscu?

+0

Proszę zaktualizować pytanie, aby wyraźnie powiedzieć, co chcesz zrobić z wynikiem sortowania pliku. Czy chcesz go posortować, zastępując nieposortowaną zawartość 'pliku' posortowaną zawartością tego samego pliku? Sposób, w jaki obecnie zadawane jest twoje pytanie, nie robi nic, jest poprawną odpowiedzią (nie chcesz żadnego wyjścia, więc nic nie rób). –

+0

@KeithThompson dziękuję za troskę, próbowałem posortować plik, ale chcę uniknąć wyjścia na ekranie. –

+0

Więc gdzie chcesz wyjść? Do nowego pliku? Do oryginalnego pliku? Do drukarki w hali? –

Odpowiedz

167

można użyć pliku przekierowanie do przekierowany posortowanych wyjściowe:

sort input-file > output_file 

Albo można użyć -o opcja sortowania, aby wskazać ten sam plik wejściowy i wyjściowy:

sort file -o file 

Uwaga: Częstym błędem jest próba przekierować dane wyjściowe do tego samego pliku wejściowego (np sort file > file). To nie działa, ponieważ powłoka wykonuje przekierowania (a nie program sort (1)), a plik wejściowy (jako wynik również) zostanie usunięty tuż przed przyznaniem programowi sort (1) sort (1) czytając to.

+18

Dobra uwaga na powszechny błąd – Drakes

+1

To naprawdę przydaje się, gdy musisz ręcznie edytować słowniki dla LaTeX, +1 –

+2

Wystarczy wspomnieć o ważności zamówienia. Od 'stronach GNU sort': ' -o plik-wyj ' '--output = plik-wyj' dokąd zapisać plik-wyj zamiast standardowego wyjścia. W nowszych systemach, '-o 'nie może pojawić się po pliku wejściowym, jeśli ustawiono' POSIXLY_CORRECT', np. 'Sort F -o F '. Przenośne skrypty powinny określać '-o OUTPUT-FILE 'przed jakimikolwiek plikami wejściowymi. –

26

Polecenie sort domyślnie drukuje wynik operacji sortowania na standardowe wyjście. W celu osiągnięcia „w miejscu” rodzaj, można to zrobić:

sort -o file file 

ta nadpisuje wejście file z wyjściem sortowane. Przełącznik -o, używany do określenia wyjścia, is defined by POSIX, więc powinny być dostępne dla wszystkich wersji sort:

-o Określ nazwę pliku wyjściowego być stosowany zamiast standardowego wyjścia. Ten plik może być taki sam, jak jeden z plików wejściowych.

Jeśli jesteś na tyle niefortunne mieć wersję sort bez przełącznika -o (Luis zapewnia mnie, że istnieje), można osiągnąć „w miejscu” Edytuj w standardowy sposób:

sort file > tmp && mv tmp file 
+2

Nie, mogą być niedostępne w wersjach sortowania nie zgodnych z POSIX (jest ich kilka) Jeśli chcesz posortować ten sam plik, po prostu wykonaj polecenie 'sort filea> fileb; mv -f fileb filea'. –