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.txt
んnew.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(未設定)の場合にのみ印刷します。