2つのファイルの違いを1つのファイルに書き込む方法

2つのファイルの違いを1つのファイルに書き込む方法

2つのファイルがあるとしましょa.txtb.txt

コンテンツa.txt:

hello world

コンテンツb.txt:

hello world
something else

もちろん、vimdiff違いを確認するために使用できます。つまり、a.txt上記の例のように、すべての行を含める必要がありますb.txtb.txta.txt

b.txt私の質問は存在しますが、存在しない行をa.txtファイルに記録する方法は?

答え1

comm -1 -3 a.txt b.txt > c.txt

-1のみにある行を除きa.txt-3両方にある行を除外します。したがって、b.txtの行のみが出力されます(man comm詳細はまたは参照)。comm --help出力は次にリダイレクトされます。c.txt

2つのファイルの違いを確認するには、diff代わりにを使用してくださいcomm

diff -u a.txt b.txt > c.txt

答え2

サブセットを気にしないと、ただ使えます

diff a.txt b.txt|grep ">"|cut -c 3- > foo.txt

$ cat a.txt
hello world
$ cat b.txt
hello world
something else
$ diff a.txt b.txt|grep ">"|cut -c 3- > foo.txt
$ cat foo.txt
something else

答え3

限定:これは実際にはファイルdiffではなく、行diffセットに似ています(しかし、おそらくこれが必要になるでしょう)。

a.txt以下のすべての違いは次のとおりですb.txt

sort a.txt b.txt | uniq -u > c.txt

行方不明a.txt(行方不明行は無視b.txt):

sort a.txt a.txt b.txt | uniq -u > c.txt

説明:2つのファイルをcatまとめた後、ファイルの1つにのみ存在するuniq行のみを表示するために、行sortのサブセットをコピーしました。uniq -u入力(a.txt上記)のいずれかをコピーすると、出力はそのファイル内のすべての行を抑制します。

ファイルが重複すると、上記のコマンドの出力が破損します。ファイルに重複がある場合は、まずこれらの重複を削除してから、新しく作成されたファイルから上記のコマンドを実行する必要があります。

sort a.txt | uniq | aa.txt
sort b.txt | uniq | bb.txt

結果を確認できます。どちらのコマンドも同じチェックサムを提供する必要があります。

sort b.txt c.txt | uniq | sha256sum
sort a.txt c.txt | uniq | sha256sum

ファイルの1つが別のファイルの親セットである場合(したがって、他のファイルのすべての行とそれ以上を含む場合)、少し単純化できます。あなたの例と同様に、これはb.txt親セットであるため、次の2つのコマンドも同じチェックサムを提供する必要があります。

sort b.txt | sha256sum
sort a.txt c.txt | sha256sum

答え4

b.txt - a.txt: sort a.txt a.txt b.txt | uniq -u > foo.txt

関連情報