CSVファイルでLinuxのコマンドラインとは異なる行を見つける方法は?

CSVファイルでLinuxのコマンドラインとは異なる行を見つける方法は?

file1.csvとの間にどんな行が違うのか調べようとしますfile2.csvfile1.csv次の場合:

1,2,3,4
5,6,7,8
9,10,11,12

次のようになりますfile2.csv

1,2,3,4
9,9,9,9
5,6,7,8
9,9,11,12

これらの一意の線を取得するには、どのコマンドを使用できますか?また、最高のツールになりますかdiffcommgrep

答え1

あなたは以下を探しているかもしれませんcomm

$ comm <(sort file1.csv) <(sort file2.csv)
        1,2,3,4
        5,6,7,8
9,10,11,12
    9,9,11,12
    9,9,9,9

デフォルトでは、最初のファイルの行だけが最初の列として印刷され、2番目のファイルにある行は2番目の列として印刷されます。-1-2またはを使用して-3これらの列を非表示にすることができます。たとえば、

  • 2つのファイルの内容のみを表示:

    $ comm -12 <(sort file1.csv) <(sort file2.csv) 
    1,2,3,4
    5,6,7,8
    
  • 最初のファイルにある行のみを表示し、2番目のファイルにはない行を表示します。

    $ comm -32 <(sort file1.csv) <(sort file2.csv) 
    9,10,11,12
    
  • 2番目のファイルには存在するが最初のファイルにはない行のみを表示します。

    $ comm -31 <(sort file1.csv) <(sort file2.csv) 
    9,9,11,12
    9,9,9,9
    

関連情報