Asort
は、出力を開始する前にすべての入力を確認する必要があります。このため、sort
プログラムはファイルをその場で変更するオプションを簡単に提供できます。
sort temp.txt -o temp.txt
具体的には、GNU のドキュメントにsort
は次のように書かれています。
通常、 sort は output-file を開く前にすべての入力を読み取るため、sort -o F F
や などのコマンドを使用してファイルを安全にソートできますcat F | sort -o F
。ただし、sort
with --merge
( -m
) はすべての入力を読み取る前に出力ファイルを開くことができるため、 sort のようなコマンドは、読み取りが完了する前にcat F | sort -m -o F - G
書き込みを開始する可能性があるため安全ではありません。F
cat
BSDのドキュメントには次のように書かれていますがsort
:
[the] output-file が入力ファイルの 1 つである場合、sort はそれを一時ファイルにコピーしてから、出力をソートして [the] output-file に書き込みます。
などのコマンドuniq
は、入力の読み取りが完了する前に出力の書き込みを開始できます。これらのコマンドは通常、インプレース編集をサポートしていません (この機能をサポートするのはより困難です)。
通常、一時ファイルを使用してこれを回避するか、中間ファイルを絶対に避けたい場合は、バッファを使用して完全な結果を保存してから書き出すことができます。たとえば、次の場合perl
:
uniq temp.txt | perl -e 'undef $/; $_ = <>; open(OUT,">temp.txt"); print OUT;'
ここで、perl 部分はuniq
in 変数から完全な出力を読み取り$_
、元のファイルをこのデータで上書きします。選択したスクリプト言語、おそらく Bash でも同じことができます。ただし、ファイル全体を格納するのに十分なメモリが必要になることに注意してください。これは、大きなファイルを扱う場合にはお勧めできません。