ファイル間の違いを確認する方法

ファイル間の違いを確認する方法

私はstackoverflowコミュニティで他の同様のリンクを見つけましたが、私の質問に正確には答えませんでした。

行数が異なる2つのファイルがありますが、両方とも並べ替えました。私の元のファイルの長さは数百行でしたが、トラブルシューティングのためにfile1を12行に、file2を5行に設定しました。ファイル 2 はファイル 1 のサブセットです。私が望むのは、file1にはあるがfile2にはないすべての行を出力するコマンドを実行することです。

Unixコマンドを試してみましたdiffが、commすべてfile1の内容全体を一覧表示しましたが、これは私が望むものではありません。

簡単な例は次のとおりです。

File1      File2
A           B
B           E
C           I
E           N
G           O
I
L
M
N
O
X

ここでは、file2のすべての内容がfile1にあることがわかります。何らかの理由で、diff両方ともcommfile1の内容全体を表示します。ファイル全体を検索するのではなく、1行ずつ比較するからだそうです。

私が期待する結果を出力する別のUnixコマンドはありますか?

編集:私が望むものを得るために使用するコマンドは次のとおりです。

a) ファイル1をファイル2と比較する

これは、デフォルトでfile1のすべての項目を<前にリストし、内容がfile1の内容であることを示し、前にはfile2のすべての項目をリストする>を表示します。確かに私に必要なわけではありません。

b)通信-23文書1文書2

これは、期待した違いではなく、file1の内容全体を再表示します。私も

C)コミュニケーション-3文書1文書2

commのヘルプページによると、ファイル1の行は印刷されますが、ファイル2の行は印刷されず、その逆も同様です。ただし、B / Cの例では、Bは両方のファイルに表示されますが、目的の内容は表示されません。別のライン。しかし、出力ではそれが1つにあり、もう1つにはないと思って印刷します。したがって、出力は次のようになります。

A
B
    B
C
E
    E
etc.

これは私が期待したものではありません。楽しみにしています。

A
C
G
L
M
X

答え1

ファイルAからファイルbの内容を逆グレープするだけです。

例:

francois@zaphod:/tmp$
 cat > A
az
ae
ar
at
ay
au
francois@zaphod:/tmp$
 cat > b
ba
by
ay
at
au
francois@zaphod:/tmp$
  grep -v "$(cat /tmp/b)" /tmp/A
az
ae
ar
francois@zaphod:/tmp$

ここの出力はファイル b にはないファイル A の行です。

答え2

Diff出力は、ファイルXをファイルYに変換するために実行する必要がある操作を示しています。

あなたのコメントに応じて、次のオネライナーを使用できます。

cat x y | sort -u  | cat y - | sort | uniq -u

そうだろう

  1. 2つのファイルを読む
  2. 並べ替え、一意の行のみを印刷します(-u順番に)。
  3. ファイル(y)を読み込み、パイプ出力と組み合わせる
  4. リゾート出力
  5. -u一度(ユニークに)発生する行のみが使用されるようにuniqを使用します。

この方法は集合理論に基づいています。まず、2つのグループを追加してから1つを減算します。

答え3

ファイルの1つがDOS形式のテキストファイルで、もう1つがUnix形式のテキストファイルの場合、その行の文字が同じであっても、各行は他のファイルのすべての行とは異なります。これは、あるファイルの各行の末尾に追加のキャリッジリターン文字がありますが、他のファイルにはないためです。

Unixテキストファイルですが、DOSテキストファイルのcomm -3 file1 file2場合は、次のような出力が出ると予想しました(これがあなたが持っているものです)。file1file2

A
B
        B
C
E
        E
G
I
        I
L
M
N
        N
O
        O
X

DOSテキストファイルでUnixテキストファイルのcomm -3 file1 file2場合は、次の出力が予想されます。file1file2

A
        B
B
C
        E
E
G
        I
I
L
M
        N
N
        O
O
X

両方のファイルの行末が同じ場合(たとえば、両方ともDOSテキストファイル、または両方がUnixテキストファイルの場合)、予想される出力は次のcomm -3 file1 file2とおりです。

A
C
G
L
M
X

次のコマンドを使用して、これら2つのファイルをUnixテキスト形式に変換できます。

dos2unix file1 file2

...すでにdos2unixユーティリティがインストールされているとします。

関連情報