2011-01-17 11 views
9

[ソートされていない] file1とfile2の2つのファイルを比較したいと思います。私は行番号にかかわらずfile2 - file1 [違い]をしたいと思いますか? 差分が機能しません。UNIXの2つのファイルを比較します

+0

であなたをソートしてから比較する考えがありますか? –

+0

差分は機能していませんか?差は働くはずです。エラーは何ですか? –

+0

プログラミングしていません...スーパーユーザーに移動します。 – leppie

答えて

19

私はあなたに必要な出力が得られますCOMM

comm -23 file1 file2 

を使用して解決策を得ました。

とにかくファイルを並べ替える必要があります。

+1

['comm' man page](http://netbsd.gw.com/cgi-bin/man-cgi?comm++NetBSD-current)によれば、それは字句的にソートされたファイルに作用します。したがって、まずファイルに対して 'sort'を使わなければなりません。 – tonio

+0

[差分]の[amalloyのコメント](http://stackoverflow.com/questions/4715885/compare-two-files-in-unix/4756123#comment24120178_4715952)のように、 'comm -23 <ソートファイル1)<(ソートファイル2) '。 – fedorqui

1

最も簡単な方法:sort(1)でファイルをソートし、次にdiff(1)を使用します。

17

まあ、最初にファイルを並べ替えるだけで、ソートされたファイルをdiffすることができます。

sort file1 > file1.sorted 
sort file2 > file2.sorted 
diff file1.sorted file2.sorted 

また、ファイル1から不在であるFILE2の行を報告する出力をフィルタリングすることができます。

diff -u file1.sorted file2.sorted | grep "^+" 

コメントで示されているように、あなたが実際にファイルをソートする必要はありません。代わりに、プロセスの置換を使用して言うことができます。

diff <(sort file1) <(sort file2) 
+3

ちなみに、bashには最初の3つのコマンドのショートカットがあります: 'diff <(sort file1)<(sort file2)'です。 – amalloy

2

UNIXのファイルを比較するの基本的なコマンドがあります。

  1. cmp:このコマンドは2つのファイルを比較するために使用されるには、バイト単位で、任意の不一致が発生したとして、それが画面にエコーします。不一致がなければ、私は何の応答も与えません。 構文:$ cmp file1 file2。

  2. comm:このコマンドは1で利用可能なレコードを見つけるために使用されているが、他の

  3. diff

+0

これに加えて、cmpはソートされたデータに対してのみ使用されます。 –

関連する問題