以下の sorted.txt というソートされたファイルがあるとしましょう。
beautiful
easy
fast
functional
handy
これで、echo fine-grained >> sorted.txt
ファイルの末尾に「handy」の後に「fine-grained」が追加されます。ファイルの順序を変更せずに「Quick」と「Functional」の間に順番に挿入する方法はありますか?
ベストアンサー1
理論的には可能ですが、魔法のような方法はありません。
どの値を入れたいかを正確に知っている場合は、sed
内部検索と置換を使用して新しい値をファイルに貼り付けることができますが、ソートの複雑さを考慮すると、基本的にどこかでソートする必要があるかどうかによって異なります。キューにあります。
echo fine-grained >> sorted.txt
sort sorted.txt > sorted.txt.new && mv sorted.txt{.new,}
またはsponge
:
{ echo fine-grained ; cat sorted.txt } | sort | sponge sorted.txt
編集する: ザイルズ-m
作業速度を上げるためにソートパラメータを使用する方法については良い提案がありました。マニュアルから:
-m, --merge merge already sorted files; do not sort
これにより、ソートが入力全体を処理するのを防ぎ、入力ファイルをスキャンしてファイル間の関係を特定するだけです。
echo fine-grained | sort -m sorted.txt - | sponge sorted.txt