A'nın sort
çıktı almaya başlamadan önce tüm girdileri görmesi gerekir. Bu nedenle, sort
program kolayca bir dosyayı yerinde değiştirme seçeneği sunabilir:
sort temp.txt -o temp.txt
Özellikle, GNU'nun dokümantasyonu şunusort
söylüyor:
Normalde sort, çıktı dosyasını açmadan önce tüm girdileri okur, böylece sort -o F F
ve gibi komutları kullanarak bir dosyayı güvenli bir şekilde yerinde sıralayabilirsiniz cat F | sort -o F
. Bununla birlikte, sort
with --merge
( -m
) tüm girdileri okumadan önce çıktı dosyasını açabilir, bu nedenle cat F | sort -m -o F - G
sıralama yazmaya F
başlamadan önce yazmaya başlayabileceği için gibi bir komut güvenli değildir cat
.
BSD'nin dokümantasyonu sort
şöyle diyor:
Eğer [] çıktı dosyası girdi dosyalarından biriyse, sıralama, çıktıyı [çıktı] dosyasına sıralayıp yazmadan önce geçici bir dosyaya kopyalar.
Gibi komutlar uniq
, girdiyi okumayı bitirmeden çıktı yazmaya başlayabilir. Bu komutlar genellikle yerinde düzenlemeyi desteklemez (ve bu özelliği desteklemeleri daha zor olur).
Genellikle geçici bir dosyayla bu sorunu çözersiniz veya bir ara dosyadan kesinlikle kaçınmak istiyorsanız, yazmadan önce tüm sonucu saklamak için bir arabellek kullanabilirsiniz. Örneğin perl
:
uniq temp.txt | perl -e 'undef $/; $_ = <>; open(OUT,">temp.txt"); print OUT;'
Burada, perl bölümü uniq
değişkendeki tüm çıktıyı okur $_
ve ardından bu verileri orijinal dosyanın üzerine yazar. Aynı şeyi seçtiğiniz betik dilinde de yapabilirsiniz, hatta Bash'de bile. Ancak, tüm dosyayı depolamak için yeterli belleğe ihtiyaç duyacağını unutmayın; bu, büyük dosyalarla çalışırken tavsiye edilmez.