Kiedy używamy sort filepolecenia, plik pokazuje jego zawartość w uporządkowany sposób, co jeśli nie chcę otrzymywać żadnego rodzaju danych wyjściowych, ale posortowany plik?
Zaktualizuj swoje pytanie, aby wyraźnie wyjaśnić, co chcesz zrobić z wynikiem sortowania pliku. Czy chcesz go posortować, zastępując nieposortowaną zawartość fileposortowaną zawartością tego samego pliku? Sposób, w jaki obecnie zadawane jest twoje pytanie, nic nie robienie jest poprawną odpowiedzią (nie chcesz żadnych wyników, więc nie rób nic).
Keith Thompson
@ KeithThompson dzięki za twoją troskę, tak naprawdę próbowałem posortować plik, ale chcę uniknąć wyświetlania na ekranie.
Ali Sajid
A więc gdzie chcesz, aby dane wyjściowe poszły? W nowy plik? Do oryginalnego pliku? Do drukarki w korytarzu?
Keith Thompson
1
Do pliku orignal
Ali Sajid
uruchom, sort infile >outfilea otrzymasz posortowane dane wyjściowe do pliku „outfile”. Następnie możesz usunąć oryginalny „infile” i wszystko będzie dobrze.
Luis Colorado,
Odpowiedzi:
408
Możesz użyć przekierowania pliku, aby przekierować posortowane dane wyjściowe:
sort input-file > output_file
Albo można użyć -o, --output=FILEopcja sortowania, aby wskazać ten sam plik wejściowy i wyjściowy:
sort -o file file
Uwaga: Częstym błędem jest próba przekierowania wyjścia do tego samego pliku wejściowego (np sort file > file.). To nie działa, ponieważ powłoka dokonuje przekierowań (nie program sort (1) ), a plik wejściowy (jako wynik również) zostanie skasowany tuż przed umożliwieniem programowi sort (1) odczytania go.
Jest to naprawdę przydatne, gdy trzeba ręcznie edytować słowniki dla LaTeX, +1
Bryson S.
6
Wystarczy wspomnieć o znaczeniu porządku. Ze GNU sortstrony informacyjnej: -o OUTPUT-FILE' --output = OUTPUT-FILE 'Zapisuje wyjście do PLIKU WYJŚCIOWEGO zamiast standardowego wyjścia. W nowszych systemach -o' cannot appear after an input file if POSIXLY_CORRECT 'jest ustawiony, np. sort F -o F'. Portable scripts should specify -O WYJŚCIE-PLIK' przed plikami wejściowymi.
Yassine ElBadaoui
14
Aby uniknąć powtarzania nazwy pliku:sort -o file{,}
tstenner
65
sortKomenda drukuje wynik sortowania pracy na standardowe wyjście domyślnie. Aby uzyskać sortowanie „na miejscu”, możesz to zrobić:
sort -o file file
To nadpisuje dane wejściowe fileposortowanym wyjściem. -oPrzełącznik, używany do określenia wyjścia, jest zdefiniowany przez POSIX , więc powinny być dostępne dla wszystkich wersji sort:
-o Podaj nazwę pliku wyjściowego, który będzie używany zamiast standardowego wyjścia. Ten plik może być taki sam jak jeden z plików wejściowych.
Jeśli masz nieszczęście, aby mieć wersję sortbez -oprzełącznika ( Luis zapewnia mnie, że istnieją), możesz uzyskać edycję „w miejscu” w standardowy sposób:
Działa to również na Ubuntu po instalacji zsudo apt install moreutils
Serge Stroobandt
4
Aby posortować plik na miejscu, spróbuj:
echo "$(sort your_file)"> your_file
Jak wyjaśniono w innych odpowiedziach, nie można bezpośrednio przekierować wyjścia z powrotem do pliku wejściowego. Ale możesz ocenićsort polecenie, a następnie przekierować je z powrotem do oryginalnego pliku. W ten sposób możesz zaimplementować sortowanie na miejscu.
Podobnie możesz zastosować tę sztuczkę do innego polecenia, np. pasteZaimplementować dołączanie wierszy.
Jest to złe, ponieważ nie działa w przypadku dużych plików, pasków kończących znaki nowej linii, echomoże bałaganować ucieczkami ukośnika odwrotnego w POSIX i -odziała dla tego samego pliku jako danych wejściowych, jak wyjaśniono na stronie: stackoverflow.com/a/29244387/895245
Ciro Santilli 郝海东8 病 六四 事件 法轮功
4
Oto podejście, które wykorzystuje (ab) vim:
vim -c :sort -c :wq -E -s "${filename}"
Te -c :sort -c :wqpolecenia wywołuje porcji do vim po otwarciu pliku. -Ei -ssą niezbędne, aby vim działał w trybie „bezgłowym”, który nie zwraca się do terminala.
Nie ma to prawie żadnych korzyści w porównaniu z tym sort -o "${filename}" "${filename}"podejściem, z wyjątkiem tego, że bierze argument nazwy pliku tylko raz.
Przydało mi się to zaimplementować formatterdyrektywę we nanorcwpisie dotyczącym .gitignoreplików. Oto, czego użyłem do tego:
syntax "gitignore""\.gitignore$"
formatter vim -c :sort -c :wq -E -s
file
posortowaną zawartością tego samego pliku? Sposób, w jaki obecnie zadawane jest twoje pytanie, nic nie robienie jest poprawną odpowiedzią (nie chcesz żadnych wyników, więc nie rób nic).sort infile >outfile
a otrzymasz posortowane dane wyjściowe do pliku „outfile”. Następnie możesz usunąć oryginalny „infile” i wszystko będzie dobrze.Odpowiedzi:
Możesz użyć przekierowania pliku, aby przekierować posortowane dane wyjściowe:
Albo można użyć
-o
,--output=FILE
opcja sortowania, aby wskazać ten sam plik wejściowy i wyjściowy:Uwaga: Częstym błędem jest próba przekierowania wyjścia do tego samego pliku wejściowego (np
sort file > file
.). To nie działa, ponieważ powłoka dokonuje przekierowań (nie program sort (1) ), a plik wejściowy (jako wynik również) zostanie skasowany tuż przed umożliwieniem programowi sort (1) odczytania go.źródło
GNU sort
strony informacyjnej:-o OUTPUT-FILE'
--output = OUTPUT-FILE 'Zapisuje wyjście do PLIKU WYJŚCIOWEGO zamiast standardowego wyjścia. W nowszych systemach-o' cannot appear after an input file if
POSIXLY_CORRECT 'jest ustawiony, np.sort F -o F'. Portable scripts should specify
-O WYJŚCIE-PLIK' przed plikami wejściowymi.sort -o file{,}
sort
Komenda drukuje wynik sortowania pracy na standardowe wyjście domyślnie. Aby uzyskać sortowanie „na miejscu”, możesz to zrobić:To nadpisuje dane wejściowe
file
posortowanym wyjściem.-o
Przełącznik, używany do określenia wyjścia, jest zdefiniowany przez POSIX , więc powinny być dostępne dla wszystkich wersjisort
:Jeśli masz nieszczęście, aby mieć wersję
sort
bez-o
przełącznika ( Luis zapewnia mnie, że istnieją), możesz uzyskać edycję „w miejscu” w standardowy sposób:źródło
To jest w następującym pakiecie Fedory:
źródło
sudo apt install moreutils
Aby posortować plik na miejscu, spróbuj:
Jak wyjaśniono w innych odpowiedziach, nie można bezpośrednio przekierować wyjścia z powrotem do pliku wejściowego. Ale możesz ocenić
sort
polecenie, a następnie przekierować je z powrotem do oryginalnego pliku. W ten sposób możesz zaimplementować sortowanie na miejscu.Podobnie możesz zastosować tę sztuczkę do innego polecenia, np.
paste
Zaimplementować dołączanie wierszy.źródło
echo
może bałaganować ucieczkami ukośnika odwrotnego w POSIX i-o
działa dla tego samego pliku jako danych wejściowych, jak wyjaśniono na stronie: stackoverflow.com/a/29244387/895245Oto podejście, które wykorzystuje (ab)
vim
:Te
-c :sort -c :wq
polecenia wywołuje porcji do vim po otwarciu pliku.-E
i-s
są niezbędne, aby vim działał w trybie „bezgłowym”, który nie zwraca się do terminala.Nie ma to prawie żadnych korzyści w porównaniu z tym
sort -o "${filename}" "${filename}"
podejściem, z wyjątkiem tego, że bierze argument nazwy pliku tylko raz.Przydało mi się to zaimplementować
formatter
dyrektywę wenanorc
wpisie dotyczącym.gitignore
plików. Oto, czego użyłem do tego:źródło
nanorc
? O ironia.Czy chcesz posortować wszystkie pliki w folderze i zastąpić je w podfolderze?
Użyj tego:
źródło