1. ホーム
  2. shell

[解決済み] 2つのファイルを一行ずつ比較し、その差分を別のファイルに生成する。

2022-05-13 14:40:18

質問

file1とfile2を比較し、file1に含まれる行でfile2に存在しないものを含むfile3を生成したい。

どのように解決するのですか?

diff(1)は答えになりませんが、comm(1)は答えになります。

NAME
       comm - compare two sorted files line by line

SYNOPSIS
       comm [OPTION]... FILE1 FILE2

...

       -1     suppress lines unique to FILE1

       -2     suppress lines unique to FILE2

       -3     suppress lines that appear in both files

だから

comm -2 -3 file1 file2 > file3

入力ファイルはソートされている必要があります。もしそうでなければ、まずソートしてください。これは一時ファイルを用いて行うことができます、または...

comm -2 -3 <(sort file1) <(sort file2) > file3

は、シェルがプロセス置換をサポートしている場合(bashはサポートしています)。