ソートされたファイルの適切な場所に文字列を追加します。

ソートされたファイルの適切な場所に文字列を追加します。

以下の 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

おすすめ記事