2

ファイルfile1file2があります。file2は のサブセットですfile1。つまり、 を反復するとfile1、 にある行とfile2そうでない行がありますが、 にない行はfile2ありませんfile1。ファイル内に同じ内容の行が複数ある場合があります。ここで、それらの違い、つまり、file1にないのすべての行を取得したいと考えていfile2ます。

この好評の回答によると

diff(1) は答えではなく、comm(1) です。

(理由はともかく)

しかし、私が理解しているようにcomm、ファイルは最初にソートする必要があります。問題: 両方のファイルが順序付けられており (ソートされていません!)、この順序を維持する必要があります。だから私が本当にしたいのは、 を繰り返しfile1、すべての行をチェックすることですfile2。そうでない場合は、 に書き込みますfile3。同じコンテンツが複数回発生する場合は、複数回保持する必要があります。

コマンドラインでこれを行う方法はありますか?

4

2 に答える 2

4

GNU grep でこれを試してください:

grep -vFf file2 file1 > file3

更新

grep -vxFf file2 file1 > file3
于 2016-03-01T07:13:46.347 に答える
0

一時ファイルを避けるためにソートしたくないと思います。これは、プロセス置換で可能です。

diff <(sort file1) <(sort file2)
# or
comm <(sort file1) <(sort file2)

編集:https ://stackoverflow.com/a/4544925/3220113を使用して、別の代替手段を見つけました(短い行のテキストファイルの場合):

diff -a --suppress-common-lines -y file2 file1 | sed 's/\s*>.//'
于 2016-03-01T07:17:12.487 に答える