Linux基本コマンド:ファイルを比較「comm」の使い方

スポンサーリンク

バイオインフォマティクスでは、Linuxのコマンドを使って大量のデータを効率よく処理することが求められます。特に、ゲノム配列データや遺伝子リストなどのテキストデータを扱う際には、テキスト処理コマンドを駆使することが不可欠です。

本記事では、GNU coreutils に含まれる comm コマンドに焦点を当て、その基本的な使い方から応用例までを詳しく解説します。comm は、ソート済みの2つのファイルを比較し、共通部分やユニークな部分を抽出するのに便利なコマンドです。


1. comm コマンドとは?

comm は、2つのソート済みのファイルを比較し、それぞれのファイルにのみ存在する行、または両方のファイルに共通する行を出力するためのコマンドです。

基本的な構文

comm [OPTION] FILE1 FILE2
  • FILE1:比較対象の1つ目のファイル(ソート済みである必要あり)
  • FILE2:比較対象の2つ目のファイル(ソート済みである必要あり)
  • [OPTION]:表示する列を制御するオプション

出力フォーマット

デフォルトでは、comm の出力は3つの列に分かれます。

  1. FILE1 にのみ存在する行
  2. FILE2 にのみ存在する行
  3. 両方のファイルに共通する行

たとえば、以下の2つのファイルを比較する場合:

file1.txt

apple
banana
cherry

file2.txt

banana
cherry
date

次のように comm を実行すると:

comm file1.txt file2.txt

出力は以下のようになります:

apple                                                                                      
                banana                                                                     
                cherry                                                                     
        date                                                                               

各列の意味:

  • apple(1列目)→ file1.txt にのみ存在
  • date(2列目)→ file2.txt にのみ存在
  • bananacherry(3列目)→ 両方のファイルに共通

2. comm の基本オプション

comm には、特定の列を非表示にするためのオプションがあります。

オプション説明
-11列目を非表示(file1.txt にのみ存在する行を除外)
-22列目を非表示(file2.txt にのみ存在する行を除外)
-33列目を非表示(共通部分を除外)

使用例

2つのファイルに共通する行のみを取得

comm -12 file1.txt file2.txt
  • -1:1列目(file1のみの行)を非表示
  • -2:2列目(file2のみの行)を非表示
    出力:
banana
cherry

file1.txt にのみ存在する行を取得

comm -23 file1.txt file2.txt
  • -2:2列目(file2のみの行)を非表示
  • -3:3列目(共通の行)を非表示
    出力:
apple

file2.txt にのみ存在する行を取得

comm -13 file1.txt file2.txt
  • -1:1列目(file1のみの行)を非表示
  • -3:3列目(共通の行)を非表示
    出力:
date

3. comm の応用例

3.1 遺伝子リストの比較

バイオインフォマティクスでは、異なる条件下で発現している遺伝子リストを比較することがよくあります。例えば、以下のような2つのリストがあるとします。

control_genes.txt(コントロール群の遺伝子)

BRCA1
TP53
MYC
EGFR

treatment_genes.txt(治療群の遺伝子)

TP53
MYC
KRAS
EGFR

共通の遺伝子(治療・コントロール両方で発現)を抽出

comm -12 control_genes.txt treatment_genes.txt

出力:

TP53
MYC
EGFR

治療群で新たに発現した遺伝子を抽出

comm -13 control_genes.txt treatment_genes.txt

出力:

KRAS

3.2 配列データのフィルタリング

ゲノム解析では、特定のリストにあるシーケンス ID を含む行を取り出すことがあります。

all_sequences.txt(すべてのシーケンス ID)

seq001
seq002
seq003
seq004
seq005

target_sequences.txt(ターゲットとするシーケンス ID)

seq002
seq004

ターゲットシーケンスのみを取得

comm -12 all_sequences.txt target_sequences.txt

出力:

seq002
seq004

3.3 sort と組み合わせた処理

comm の前提条件として、比較対象のファイルは ソート済み である必要があります。そのため、未ソートのファイルに対して sort を適用することがよくあります。

sort file1.txt > sorted_file1.txt
sort file2.txt > sorted_file2.txt
comm sorted_file1.txt sorted_file2.txt

また、パイプ (|) を活用して、ソートと comm を一度に実行することもできます。

comm <(sort file1.txt) <(sort file2.txt)

まとめ

comm コマンドは、ソート済みの2つのファイルを比較し、共通部分やユニークな部分を簡単に抽出できる強力なツールです。

ポイントまとめ

  1. comm の出力は3列に分かれる(file1のみ, file2のみ, 両方共通)。
  2. オプションを使うと特定の列を非表示にできる-1, -2, -3)。
  3. ソート済みのファイルが必須。未ソートなら sort と組み合わせて使う。
  4. 遺伝子リストの比較やゲノムデータのフィルタリングに便利

バイオインフォマティクスのデータ処理において、comm はシンプルながら非常に有用なコマンドです!!ぜひ活用してみてくださいね〜!

タイトルとURLをコピーしました