シェルスクリプト入門(1)
python会なのにpythonまだ触ったことありません。勉強せねば。
データ整形の流れって、教わる機会なくないですか? つまらないものですが、僕のやり方を紹介してみます。 始めたばかりの人は参考にしてください。 経験者の方、変なとこあったらどしどし突っ込みください! そして皆さんの自己流も教えてもらえると嬉しいです。
1) scriptに起こす前
shell scriptに書き起こす前に、プロンプト画面(Mac,Ubuntuならterminal)でテストします。 僕はいつもcatでファイルにつないで、パイプの後に試したいコマンドを打ちます。 その後にパイプでheadにつないで、頭だけ出力してみます。たいていファイル重いので。 圧縮ファイルの時は、解凍する前にzcatでつないで試します。
cat hogehoge.txt | sed 1d(試したいコマンド)| head
zcat hoge.gz | cut –f1(試したいコマンド)| head
一行が長くて確認しづらい!と思ったら、headからless –Sにつなぎます。 別画面で折り返しなしで見ることができます。
cat hogehoge | sed 1d(試したいコマンド)| head | less -S
2) scriptを書く
うまくいきそうで、だいたい流れが思い描けたらshell scriptに書き起こします。 結局他のファイルも同じ処理をするはめになり、scriptに残しておけば・・と後悔することが多いからです。
touch test.sh # ファイルつくって、
emacs test.sh # emacsで開く。
#!/bin/bash # おまじない。
$1=filename # ファイルはいつも外から入れれるようにしてます。
rm –r ./folder # 一発で上手くいくことはないので、やり直しやすいように消去コマンド。
mkdir ./folder # 散らからないように専用フォルダを作成。
dir1="./folder" # フォルダ名をいつでも変えやすいようにパスを変数にいれる。
cat "$filename" | sed 1d > "$dir1"/hogehoge2.txt #目的のコマンドで処理して保存。
3) 実行
書けたら、処理したいファイルを渡して実行してみます。
&
はバックグラウンド実行です。
bash ./test.sh ./hogehoge.txt &
時間がかかりそうで家に帰りたいときは、nohupでサーバーと切れても大丈夫なように。 screenを使うこともあります。
nohup bash ./test.sh ./hogehoge.txt &
4) 修正
scriptを修正するときは、元の文は#をつけてコメントアウトしときます。 そうすれば、後でやり直しやすいです。
# cat "$filename" | sed 1d > "$dir1"/hogehoge2.txt # コメントアウトして置いておく。
cat "$filename" | grep "blahblah" > "$dir1"/hogehoge2.txt # 新しい文。
どこでバグってるか分からない時は、とりあえずechoで変数を出してみたりしてチェックしてます。
5) 応用編
あとはひたすらコマンドを駆使して書き上げていきます。 以下の基本コマンドでだいたいのことはできるかと。 特にawkはたくさんのことができます。joinも重宝します。
command | 説明 |
---|---|
cat | ファイルを縦につなぐ |
paste | ファイルを横につなぐ |
sed | 指定行抜き出すor削除or文字置換 |
cut | 指定列抜き出すor削除 |
awk | 抜き出し方をいろいろカスタマイズ |
tr | 文字置換 |
sort | 整列 |
uniq | 重複行を削除or抜き出す |
join | 2つのファイルを同じ項目で合わせる |
grep | 特定の文字が入った行を出す |
各コマンドのオプションの使い方が重要ですが、長くなってきたので詳細はまたの機会に。
- 前の記事 : MACS2とdeepToolsのbigwigファイルの比較
- 次の記事 : TCGAbiolinksとその使い方
- 関連記事 :