A sort
perlu melihat semua masukan sebelum dapat mulai menghasilkan. Karena alasan ini, sort
program dapat dengan mudah menawarkan opsi untuk mengubah file di tempat:
sort temp.txt -o temp.txt
Secara khusus, dokumentasi GNUsort
mengatakan:
Biasanya, sort membaca semua masukan sebelum membuka file keluaran, sehingga Anda dapat mengurutkan file dengan aman menggunakan perintah seperti sort -o F F
dan cat F | sort -o F
. Namun, sort
dengan --merge
( -m
) dapat membuka file output sebelum membaca semua input, jadi perintah seperti cat F | sort -m -o F - G
ini tidak aman karena sort mungkin mulai menulis F
sebelum cat
selesai membacanya.
Sedangkan dokumentasi BSD sort
menyebutkan:
Jika file output adalah salah satu file input, sortir salinannya ke file sementara sebelum menyortir dan menulis output ke file output.
Perintah seperti uniq
dapat mulai menulis keluaran sebelum selesai membaca masukan. Perintah ini biasanya tidak mendukung pengeditan di tempat (dan akan lebih sulit bagi mereka untuk mendukung fitur ini).
Anda biasanya mengatasinya dengan file sementara, atau jika Anda benar-benar ingin menghindari file perantara, Anda dapat menggunakan buffer untuk menyimpan hasil lengkap sebelum menulisnya. Misalnya dengan perl
:
uniq temp.txt | perl -e 'undef $/; $_ = <>; open(OUT,">temp.txt"); print OUT;'
Di sini, bagian perl membaca keluaran lengkap dari uniq
dalam variabel $_
dan kemudian menimpa file asli dengan data ini. Anda dapat melakukan hal yang sama dalam bahasa skrip pilihan Anda, bahkan mungkin di Bash. Tetapi perhatikan bahwa itu akan membutuhkan cukup memori untuk menyimpan seluruh file, ini tidak disarankan saat bekerja dengan file besar.