A sortmusi zobaczyć wszystkie dane wejściowe, zanim będzie można rozpocząć wyprowadzanie. Z tego powodu sortprogram może łatwo oferować opcję modyfikacji pliku w miejscu:
sort temp.txt -o temp.txt
W szczególności dokumentacja GNUsort mówi:
Zwykle sort czyta wszystkie dane wejściowe przed otwarciem pliku-wyjściowego, więc możesz bezpiecznie posortować plik w miejscu, używając poleceń takich jak sort -o F Fi cat F | sort -o F. Jednak za sortpomocą --merge( -m) można otworzyć plik wyjściowy przed odczytaniem wszystkich danych wejściowych, więc polecenie takie jak cat F | sort -m -o F - Gnie jest bezpieczne, ponieważ sortowanie może rozpocząć zapisywanie Fprzed zakończeniem catodczytu.
Podczas gdy dokumentacja BSD sortmówi:
Jeśli [] plik-wyjściowy jest jednym z plików wejściowych, sort kopiuje go do pliku tymczasowego przed sortowaniem i zapisaniem wyniku do [] pliku-wyjściowego.
Polecenia, takie jak uniqmogą rozpocząć zapisywanie danych wyjściowych, zanim zakończą odczytywanie danych wejściowych. Te polecenia zazwyczaj nie obsługują edycji lokalnej (i byłoby im trudniej obsługiwać tę funkcję).
Zwykle omijasz ten problem z plikiem tymczasowym lub jeśli absolutnie chcesz uniknąć posiadania pliku pośredniego, możesz użyć bufora do przechowywania pełnego wyniku przed jego wypisaniem. Na przykład z perl:
uniq temp.txt | perl -e 'undef $/; $_ = <>; open(OUT,">temp.txt"); print OUT;'
Tutaj część perla odczytuje pełne dane wyjściowe ze uniqzmiennej, $_a następnie zastępuje oryginalny plik tymi danymi. Możesz zrobić to samo w wybranym języku skryptowym, być może nawet w Bash. Pamiętaj jednak, że będzie potrzebować wystarczającej ilości pamięci do przechowywania całego pliku, nie jest to zalecane podczas pracy z dużymi plikami.