A sort
は、出力を開始する前にすべての入力を確認する必要があります。このため、sort
プログラムはファイルをインプレースで変更するオプションを簡単に提供できます。
sort temp.txt -o temp.txt
具体的には、GNUsort
のドキュメントには次のように書かれています。
通常、sortはoutput-fileを開く前にすべての入力を読み取ります。そのため、sort -o F F
やなどのコマンドを使用して、ファイルを安全に並べ替えることができますcat F | sort -o F
。しかし、sort
と--merge
(-m
)コマンドのようなので、すべての入力を読み込む前に、出力ファイルを開くことができます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
は変数から完全な出力を読み取り$_
、元のファイルをこのデータで上書きします。おそらくBashでも、お好みのスクリプト言語で同じことができます。ただし、ファイル全体を格納するのに十分なメモリが必要になることに注意してください。これは、大きなファイルを扱う場合にはお勧めできません。