バイオインフォマティクスの現場では、膨大なデータを処理するためにLinuxの基本コマンドを活用することが不可欠です。その中でも、shuf
コマンドは、データのランダム化に便利なツールです。本記事では、shuf
のバイオインフォマティクスでの基本的な使い方を解説します。
1. shuf コマンドとは?
shuf
は、指定した入力データをランダムに並べ替える(シャッフルする)コマンドです。例えば、リストの順番をランダム化したり、指定した個数のランダムな行を抽出したりする際に利用できます。
基本構文
shuf [OPTION]... [FILE]
または、標準入力を使用する場合:
echo -e "A\nB\nC\nD" | shuf
主なオプション
-n NUM
:NUM 行のランダムなデータを出力-o FILE
:結果を指定したファイルに保存-r
:重複を許可してランダムな行を出力-e
:ファイルではなく、引数のリストをシャッフル--random-source=FILE
:乱数の種を指定する(再現可能なシャッフルが可能)
2. shuf の基本的な使い方
(1) ファイル内の行をランダムに並べ替える
ファイル genes.txt
に以下のような遺伝子リストがあるとします。
BRCA1
TP53
MYC
EGFR
KRAS
このデータをランダムに並べ替えるには、以下のコマンドを実行します。
shuf genes.txt
出力例
KRAS
MYC
TP53
BRCA1
EGFR
実行するたびに異なる順序で出力されます。
(2) 指定した行数だけランダムに抽出
遺伝子リストから 3 行だけランダムに取得する場合:
shuf -n 3 genes.txt
出力例
TP53
BRCA1
KRAS
(3) ランダム化したデータをファイルに保存
結果を新しいファイル shuffled_genes.txt
に保存する場合:
shuf genes.txt -o shuffled_genes.txt
(4) 乱数の種を固定して再現性を持たせる
バイオインフォマティクスでは、ランダムな処理を再現可能にすることが重要です。--random-source
を使用すると、毎回同じシャッフル結果を得られます。
shuf genes.txt --random-source=/dev/urandom
ただし、もっと一般的には sort
コマンドと RANDOM
環境変数を組み合わせて、同じ並び替えを再現する方法が推奨されます。
shuf --random-source=<(yes 42 | head -c 100) genes.txt
3. shuf の応用例(バイオインフォマティクス)
(1) DNA 配列のランダム化
FASTA ファイル sequences.fasta
からランダムに 5 配列だけ取得する場合:
grep '^>' sequences.fasta | shuf -n 5
FASTA ファイルはヘッダー(>
で始まる行)と配列本体がセットになっているため、awk
を組み合わせると、ヘッダーと配列本体を一緒に取得できます。
awk '/^>/ {if (NR>1) print ""; print; next} {printf "%s", $0} END {print ""}' sequences.fasta | \
shuf -n 5
(2) RNA-seq サンプルのシャッフル
RNA-seq の解析では、サンプルのラベルをランダムに入れ替えることで統計的な検定を行うことがあります。以下のようなファイル samples.tsv
があるとします。
Sample1 Tumor
Sample2 Normal
Sample3 Tumor
Sample4 Normal
シャッフルして、ランダムなグループ分けを行う場合:
shuf samples.tsv
(3) 機械学習のためのデータ分割
例えば、遺伝子発現データセットを訓練データとテストデータにランダム分割する場合:
shuf genes.txt | head -n 80 > train.txt
shuf genes.txt | tail -n 20 > test.txt
80% を訓練データ、20% をテストデータとして分割する簡単な方法です。
(4) 進化系統解析のブートストラップ
系統樹解析では、ブートストラップ(統計的な再サンプリング)を行うことで、系統樹の信頼性を評価できます。shuf
を使ってブートストラップ用のデータセットを作成できます。
for i in {1..100}; do
shuf alignment.fasta -o bootstrap_$i.fasta
done
これで、100 個の異なるシャッフルされたデータセットを作成できます。
4. まとめ
shuf
コマンドは、ファイル内のデータをランダム化する非常に便利なツールです。バイオインフォマティクスでは、遺伝子リストのシャッフル、RNA-seq のサンプルランダム化、機械学習のデータ分割、進化系統解析のブートストラップなど、多くの場面で応用できます。特に、shuf -n
を活用すれば、データの一部をランダムに抽出することも可能です。
バイオインフォマティクスのデータ解析では、再現性が重要なため、--random-source
などのオプションも適切に使いこなしましょう。シェルスクリプトと組み合わせることで、より高度なデータ処理が可能になります。
次のステップとして
awk
やsed
との組み合わせseq
を使ったランダムサンプリングsort
コマンドと併用したランダム処理
など、さらなる応用を試してみると良いでしょう!!
💡 あなたのバイオインフォマティクス環境で shuf
を活用してみませんか? シェルスクリプトやデータ解析の自動化に役立つので、ぜひ試してみてくださいね〜!