はじめに
comm
コマンドは、共通のコンテンツに焦点を当ててファイルを比較するためのシンプルな Linux ユーティリティです。このコマンドは、並べ替えられた 2 つのファイルを行ごとに比較し、結果を 3 列に表示します。
次のガイドでは、Linux comm
の使用方法について説明します。 コマンドと例。
前提条件
- Linux を実行するシステム。
- ターミナルへのアクセス
通信コマンドの構文
comm
コマンドは、比較するファイルの名前を示す少なくとも 2 つの引数を指定して実行されます。ファイル名の前にオプションを追加すると、出力がカスタマイズされます。
基本的な comm
構文は次のとおりです:
comm [file_name_1] [file_name_2]
comm [options] [file_name_1] [file_name_2]
ただし、 comm
を実行すると オプションなしでは結果が得られず、次の出力が出力されます:
通信コマンド オプション
comm
の使用 は単純ですが、オプションを追加すると、追加のカスタマイズが可能になります。
以下の表にはすべての comm
が含まれています オプション:
コマンド | 説明 |
---|---|
-1 | 出力を最初の列なしで印刷し、最初のファイルに固有の行を非表示にします。 |
-2 | 出力の 2 番目の列を非表示にします (2 番目のファイルに固有の行)。 |
-3 | 共通行を含む列を印刷しません。 |
--check-order | ファイルがソートされているかどうかをチェックします。 |
--nocheck-order | ファイルがソートされているかどうかをチェックせずに結果を出力します。 |
--output-delimiter=[any character] | 出力のデフォルトのスペースを別の文字に置き換えます。 |
--total | 各列の合計行数を表示します。 |
-z | 出力行を、改行で終了するデフォルト出力ではなく、NULL で終了するものとして表示します。 |
--help | ヘルプ情報を表示します。 |
--version | バージョン情報を表示します。 |
Linux 通信の例
comm
コマンドは、2 つのソートされたファイルで機能します。 comm
の仕組みを理解するには テスト環境をセットアップします:
- 2 つのテスト ファイルを作成する
- ファイルに名前を付けます (例:File_1 とファイル_2)。
- 各ファイルに異なる単語や数字を追加する
- 一部のコンテンツが重複していることを確認してください。
注: Linux では、ターミナルからファイルを作成する方法が多数用意されています。最も簡単な方法は、touch コマンドを使用することです。
cat コマンドを使用して File_1 を表示します と File_2 コンテンツ。出力は、ファイルが 3 つの単語 (art) で重複していることを示しています。 、犬 、そして方法 ):
次のセクションでは File_1 を使用します と File_2 comm
の方法を説明する
2 つのファイルを比較
2 つのソートされたファイルを 1 行ずつ比較:
comm File_1 File_2
このコマンドは結果を 3 つの列に出力します:
- 列 1 最初のファイルに固有の値のみを表示します。
- 列 2 2 番目のファイルにのみ存在するアイテムを出力します。
- 列 3 両方のファイルに共通のコンテンツを表示します:art 、犬 、そして方法 .
列を非表示
引数 -1
を使用 , -2
、および -3
特定の列のみを表示する組み合わせ。たとえば、両方のファイルに共通する行のみを出力するには:
comm -12 File_1 File_2
-12
の使用 comm
で 1 列目と 2 列目を非表示にし、両方のファイルで共有される行を含む列のみを残します。
一方、-3
列 3 を非表示にし、各ファイルに固有の行を表示します:
comm -3 File_1 File_2
大文字と小文字を区別しない
comm
との比較 大文字と小文字が区別されます。 File_1 内のすべての単語 と File_2 は小文字なので、comm
アートを認識する 、犬 、そして方法 両方のファイルに共通です。
ただし、たとえば art という単語の場合 File_1 では大文字です ただし、File_2 では小文字です。 出力は次のとおりです:
art という単語の大文字と小文字の違い /アート 2 つのファイル間プロンプト comm
各ファイルに一意の単語として登録します。 comm
の間 -i
は受け入れません 大文字と小文字を区別しないオプションとして、tr オプションは回避策を提供します。
Tr
を使用 2 つのファイルで大文字と小文字を変換し、出力を一時ファイル (Temp_1) にリダイレクトします。 、Temp_2 ):
tr A-Z a-z <File_1 > Temp_1
tr A-Z a-z <File_2 > Temp_2
Tr
両方のファイルのコンテンツを小文字に変換し、新しいファイルを作成して出力を保存します (Temp_1 、Temp_2 )。元のファイルは変更されません。
comm
を実行 Temp_1に と Temp_2 大文字と小文字を「無視」してファイルを比較するには:
comm Temp_1 Temp_2
このコマンドは小文字の art を出力します 両方のファイルの共通語として。
ソートされていないファイルの比較
comm
コマンドは、並べ替えられたファイルが引数として使用されている場合にのみ、価値のある出力を生成します。 comm
の場合 ソートされていないファイルで動作しますが、出力は使用できず、常にエラー メッセージが出力されます。
たとえば、cat
で示されているように、次の 2 つのファイルはソートされていません。 :
comm
を使用する場合 ソートされていないファイルでは、出力は次のように出力されます:
comm
の間 特定の行をペアにして出力を生成すると、出力は不完全で使用できなくなります。エラー メッセージは、どちらのファイルもソートされていないことを示しています。
ファイルがソートされていないことを確認するには、comm --check-order
を使用します :
comm --check-order Not_Sorted_File_1 Not_Sorted_File_2
--check-order
オプションはエラー メッセージを出力し、comm
を停止します ソートされていない最初の項目でファイルを比較することから。
comm
を強制するには 出力を印刷してエラー メッセージを非表示にするには、--nocheck-order
を使用します。 :
comm --nocheck-order Not_Sorted_File_1 Not_Sorted_File_2
出力は信頼できません。たとえば、art という単語 両方のファイルに共通ですが、1 列目と 2 列目に存在します。
comm
の確実な使用方法 ソートされていないファイルを使用することは、ソートを適用することです。以下を実行してください:
comm <(sort Not_Sorted_File_1 ) <(sort Not_Sorted_File_2)
出力は、単語 art を示しています 、犬 、そして方法 両方のファイルに共通です。
sort
に注意してください 引数なしは、標準出力のみに影響し、ソース ファイルは変更しません。それでも、sort
他の comm
と一緒に使用できます オプション。
たとえば、ソートされていない両方のファイルに共通する単語のみを出力するには、次を使用します:
comm -12 <(sort Not_Sorted_File_1 ) <(sort Not_Sorted_File_2)
ソースファイルをソートしてから comm
を実行するには 、sort -o
を使用 . -o
引数は、ソートされた出力を特定のファイルに保存します。
たとえば、Not_Sorted_File_1 を並べ替えます 出力を同じファイルに保存します:
sort -o Not_Sorted_File_1 Not_Sorted_File_1
cat
を実行中 ファイルを並べ替えた後、ファイルが現在並べ替えられていることを示します。 2 番目のファイルに対して同じプロセスを繰り返します。
sort -o Not_Sorted_File_2 Not_Sorted_File_2
comm
を実行 ファイルを比較するには:
comm Not_Sorted_File_1 Not_Sorted_File_2
ディレクトリを比較
comm
を使用 ls を使用して、2 つのディレクトリ内のファイル名を比較します。たとえば、 Directory1 を比較します。 と Directory2 :
comm <(ls Directory1) <(ls Directory2)
最初の列は、Directory1 に固有のファイル名を表します 、2 つ目は ディレクター に固有のものです y2 、3 つ目は両方のフォルダーに共通のファイル名を表します。
comm
実行時 ls
で 、コマンドはコンテンツではなくファイル名のみを調べます。両方のフォルダーに共通としてリストされているファイルは、同じ名前であっても異なる可能性があります。
STDIN で通信を使用する
ファイルを標準端末入力と比較するには、comm
の引数の 1 つとしてハイフンを使用します .
たとえば、File_1 を比較します 以下を使用して標準入力を使用:
comm File_1 -
File_1 と比較するテキストを入力してください 端末に直接入力するか、テキスト エディターを使用してください。
Enter を押した後 の場合、コマンドは File_2. の代わりに STDIN を使用して、出力を 3 列に出力します。
最初の列は File_1 に固有のコンテンツを表します 、2 番目は標準入力でのみ見つかった単語、3 番目の単語は両方に共通の単語を示しています。
デフォルトのセパレータを変更
comm
output はデフォルトで列をスペースで区切ります。セパレータを変更するには、--output-delimiter
を使用します オプション。
たとえば、*
を使用するには スペースの代わりに次を実行:
comm --output-delimiter=* File_1 File_2
出力は、File_1 の単語を示しています File_2 のアスタリスクはありません にはアスタリスクが 1 つ、両方のファイルに共通の項目にはアスタリスクが 2 つ付いています。
行数を表示
--total
で各列の合計行数を表示します オプション:
comm --total File_1 File_2
出力では、各列の下部に行数が表示されます。
結論
このチュートリアルの手順に従えば、ファイルを 1 行ずつ comm
と比較する方法がわかります。 指図。
次に、diff コマンドを使用してファイルを比較する別の方法を学びます。