sedを使用してあるファイルの内容を別のファイルにコピーする

sedを使用してあるファイルの内容を別のファイルにコピーする

Alma Linux 8では、sedを使用してあるファイルのすべてのテキストを別のファイルにコピーしたいと思います。たとえば、最初のファイルold.txtは次のようになります。

192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.4
192.168.0.5 
...

別のファイルはnew.txt次のとおりです。

192.168.0.1
192.168.0.2
192.168.0.3

アイテムをコピーしたいが複製しませold.txtnew.txt。期待される出力new.txt:

192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.4
192.168.0.5 

どうすればいいですか?

ベストアンサー1

一意性制約を持つ単純な順序を除いて、何も必要ありません。

sort -u old.txt new.txt >new.txt.tmp &&
     mv -f new.txt.tmp new.txt
rm -f new.txt.tmp

私は見たPOSIXsort能力を定義する入力ファイルに直接書き込むしたがって、これも実行できますが、エラーが発生したときにどれほど強力であるかをテストしていません(以前のバージョンでは、失われることなくオリジナルを保持したり、新しいバージョンに置き換えることができます)。

sort -o new.txt -u old.txt new.txt

またはを使用できますawk。このバージョンは、最初のファイルから始まり、ファイルの行の順序を変更せずに維持し、後続のファイルにのみ新しい行を追加します。

awk '
    FNR<NR && h[$0] { next }    # Skip seen lines in secondary files
    { h[$0]=1; print }          # Record the line and output it
' new.txt old.txt

説明を追加できるように行に分割しました。これを削除すると、1行に縮小することができますが、通常は読みやすいコードを書く方が良いでしょう。意図的に最初のファイルは削除しませんnew.txt

awk '! h[$0]++' new.txt old.txt

これは、表示される各行の連想配列値を増やしますが、値が0(未設定)の場合にのみ印刷します。

おすすめ記事