2つのファイルがあるとしましょa.txt
うb.txt
。
コンテンツa.txt
:
hello world
コンテンツb.txt
:
hello world
something else
もちろん、vimdiff
違いを確認するために使用できます。つまり、a.txt
上記の例のように、すべての行を含める必要がありますb.txt
。b.txt
a.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