A sort
cần xem tất cả đầu vào trước khi nó có thể bắt đầu xuất. Vì lý do này, sort
chương trình có thể dễ dàng cung cấp một tùy chọn để sửa đổi tệp tại chỗ:
sort temp.txt -o temp.txt
Cụ thể, tài liệu của GNUsort
cho biết:
Thông thường, sắp xếp đọc tất cả đầu vào trước khi mở tệp đầu ra, vì vậy bạn có thể sắp xếp tệp tại chỗ một cách an toàn bằng cách sử dụng các lệnh như sort -o F F
và cat F | sort -o F
. Tuy nhiên, sort
with --merge
( -m
) có thể mở tệp đầu ra trước khi đọc tất cả đầu vào, vì vậy một lệnh như cat F | sort -m -o F - G
không an toàn vì sắp xếp có thể bắt đầu viết F
trước khi cat
đọc xong.
Trong khi tài liệu của BSD sort
cho biết:
Nếu [the] output-file là một trong những tập tin đầu vào, hãy sắp xếp sao chép nó vào một tập tin tạm thời trước khi sắp xếp và ghi kết quả vào [the] output-file.
Các lệnh như uniq
có thể bắt đầu ghi đầu ra trước khi đọc xong đầu vào. Các lệnh này thường không hỗ trợ chỉnh sửa tại chỗ (và chúng sẽ khó hỗ trợ tính năng này hơn).
Bạn thường giải quyết vấn đề này với một tệp tạm thời hoặc nếu bạn hoàn toàn muốn tránh có tệp trung gian, bạn có thể sử dụng bộ đệm để lưu trữ kết quả hoàn chỉnh trước khi viết ra. Ví dụ, với perl
:
uniq temp.txt | perl -e 'undef $/; $_ = <>; open(OUT,">temp.txt"); print OUT;'
Ở đây, phần perl đọc kết quả hoàn chỉnh từ uniq
trong biến$_
và sau đó ghi đè lên tệp gốc bằng dữ liệu này. Bạn có thể làm điều tương tự bằng ngôn ngữ kịch bản mà bạn chọn, thậm chí có thể trong Bash. Nhưng lưu ý rằng nó sẽ cần đủ bộ nhớ để lưu toàn bộ tệp, điều này không được khuyến khích khi làm việc với các tệp lớn.