Linux基本コマンド:データをランダムに並べ替える「shuf」 の使い方

スポンサーリンク

バイオインフォマティクスの現場では、膨大なデータを処理するために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 などのオプションも適切に使いこなしましょう。シェルスクリプトと組み合わせることで、より高度なデータ処理が可能になります。

次のステップとして

  • awksed との組み合わせ
  • seq を使ったランダムサンプリング
  • sort コマンドと併用したランダム処理

など、さらなる応用を試してみると良いでしょう!!


💡 あなたのバイオインフォマティクス環境で shuf を活用してみませんか? シェルスクリプトやデータ解析の自動化に役立つので、ぜひ試してみてくださいね〜!

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