
私は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
両方ともcomm
file1の内容全体を表示します。ファイル全体を検索するのではなく、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
そうだろう
- 2つのファイルを読む
- 並べ替え、一意の行のみを印刷します(
-u
順番に)。 - ファイル(y)を読み込み、パイプ出力と組み合わせる
- リゾート出力
-u
一度(ユニークに)発生する行のみが使用されるようにuniqを使用します。
この方法は集合理論に基づいています。まず、2つのグループを追加してから1つを減算します。
答え3
ファイルの1つがDOS形式のテキストファイルで、もう1つがUnix形式のテキストファイルの場合、その行の文字が同じであっても、各行は他のファイルのすべての行とは異なります。これは、あるファイルの各行の末尾に追加のキャリッジリターン文字がありますが、他のファイルにはないためです。
Unixテキストファイルですが、DOSテキストファイルのcomm -3 file1 file2
場合は、次のような出力が出ると予想しました(これがあなたが持っているものです)。file1
file2
A
B
B
C
E
E
G
I
I
L
M
N
N
O
O
X
DOSテキストファイルでUnixテキストファイルのcomm -3 file1 file2
場合は、次の出力が予想されます。file1
file2
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
ユーティリティがインストールされているとします。