Önerilen örneğiniz (aşağıda) aynı anda aynı dosyadan okuyup yazacağınız için çalışmıyor.
$ cat filename | sort | uniq > filename
Bir boru veya yönlendirme ile ilgili fikir, her bir borunun veya yönlendirmenin sol ve sağ tarafındaki komutun aynı anda paralel olarak çalışmasıdır. Sağdaki komut, soldaki komut hala çalışırken, soldaki komuttan kendisine verilen bilgileri işler.
Senaryonuzun çalışması için, dosyaya yazan komut başlamadan önce dosyadan okunan komutun tamamlanması gerekir. Bunun çalışması için önce çıkışı geçici bir konuma yönlendirmeniz gerekir, daha sonra bittikten sonra geçici konumdan tekrar dosyaya gönderin.
Bunu yapmanın daha iyi bir yolu temel olarak eski örneğinizdeki gibidir, burada geçici bir dosyaya yeniden yönlendirir ve ardından dosyayı orijinal olarak yeniden adlandırırsınız (ancak önce dosyayı silmenize gerek yoktur, çünkü taşıma mevcut hedefleri siler) .
$ cat filename | sort | uniq > result
$ mv -f result filename
Ayrıca, verileri bir defada belleğe sığacak kadar küçük olduğunda çalışmak dışında bir dize değişkenine de kaydedebilirsiniz.
echo $(cat filename | sort | uniq > result) > filenameya da başka birşey ? Sadece geçip, deneyecek zamanım yok.