Linuxの基本コマンド:テキストデータの「列」を切り出す「cut」の使い方

スポンサーリンク

バイオインフォマティクスでは、大量のデータを処理する必要があり、そのためにはLinuxの基本コマンドを活用することが不可欠です。特に、テキストデータを処理する際にはLinuxのコマンド群が役立ちます。本記事では、「Operating on fields」 に分類される cut コマンドについて、基本的な使い方から応用までを解説します。


1. cut コマンドとは?

cut コマンドは、テキストデータの「列(フィールド)」を切り出すためのコマンドです。カンマ区切り(CSV)やタブ区切り(TSV)などのデータの特定の列を取得する際に便利です。主に以下の3つの方法でデータを抽出できます。

  1. 文字位置で抽出-c オプション)
  2. 区切り文字でフィールドを指定-d-f オプション)
  3. バイト単位で抽出-b オプション)

2. 基本的な使い方

2.1 文字位置での抽出(-c オプション)

-c オプションを使用すると、指定した文字位置の範囲を抽出できます。

echo "bioinformatics" | cut -c 1-4

出力

bioi

この例では、”bioinformatics” の最初の1〜4文字 (bioi) を取得しています。


2.2 区切り文字を使ってフィールドを抽出(-d と -f オプション)

バイオインフォマティクスでは、タブ区切りやカンマ区切りのデータを扱うことが多いです。この場合、-d オプション(区切り文字)と -f オプション(フィールド番号)を使います。

例1:タブ区切りデータ(TSV)の特定の列を取得

echo -e "Gene\tExpression\tSample" | cut -d $'\t' -f 2

出力

Expression

この例では、タブ区切りデータの2列目(”Expression”) を取得しています。

例2:CSVデータの特定の列を取得

echo "gene1,high,control" | cut -d ',' -f 1,3

出力

gene1,control

カンマ(,)を区切り文字として1列目と3列目 を取得しました。


2.3 バイト単位で抽出(-b オプション)

バイト単位で文字列を取得する場合は -b オプションを使います。ただし、UTF-8 などのマルチバイト文字では意図した結果にならない場合があるので注意が必要です。

echo "bioinformatics" | cut -b 1-4

出力

bioi

(この例では -c オプションと同じ動作になります。)


3. 応用編:バイオインフォマティクスのデータ処理

バイオインフォマティクスでは、大量の遺伝子データを処理する必要があります。cut コマンドを活用すると、簡単に必要な情報を抽出できます。

3.1 遺伝子発現データ(TSV)の解析

サンプルデータ (expression_data.tsv)

Gene    Expression_Level    Condition
TP53    12.4                Cancer
BRCA1   8.9                 Normal
EGFR    15.2                Cancer

このデータから遺伝子名(1列目)と発現レベル(2列目) だけを取得する場合:

cut -d $'\t' -f 1,2 expression_data.tsv

出力

Gene    Expression_Level
TP53    12.4
BRCA1   8.9
EGFR    15.2

3.2 FASTAファイルのヘッダー取得

FASTAファイル(配列データ)のヘッダー(> から始まる行)だけを抽出するには、grepcut を組み合わせます。

grep '^>' sequences.fasta | cut -d ' ' -f 1

このコマンドは、FASTA形式のヘッダーの最初のフィールド(遺伝子ID) を取得します。


3.3 awk や paste と組み合わせた応用

cut は他のコマンドと組み合わせることで、さらに柔軟なデータ操作が可能です。

複数のファイルから特定の列を抽出して統合

たとえば、異なるサンプルの発現データ(sample1.tsv, sample2.tsv)の遺伝子名と発現レベルを結合するには:

paste <(cut -d $'\t' -f 1,2 sample1.tsv) <(cut -d $'\t' -f 2 sample2.tsv)

4. cut コマンドの制限と代替手段

制限

  • 複数の区切り文字に対応していない(例えば ,; を同時に扱うことは不可)
  • 条件に基づくフィルタリングができないawkgrep を併用する必要がある)
  • 区切り文字が不均一な場合の処理が難しいawk の方が柔軟)

代替手段

  • awk → より高度なフィールド抽出や計算が可能
  • sed → 文字列の置換・パターンマッチングが可能
  • grep → フィルタリングと組み合わせると強力

例えば、特定の遺伝子 (TP53) の発現データだけを抽出する場合:

grep 'TP53' expression_data.tsv | cut -d $'\t' -f 1,2

5. まとめ

cut コマンドは、シンプルながらバイオインフォマティクスのデータ解析で非常に便利なツールです。特に、タブ区切り・カンマ区切りデータの特定列を抽出する のに適しており、greppaste と組み合わせることでさらに応用の幅が広がります。

ただし、cut だけではできない処理も多いため、必要に応じて awksed などのコマンドと組み合わせて、より柔軟なデータ処理を行うのが良いでしょう!!

今後のデータ解析にぜひ活用してみてください〜!

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