今日から、俺は、遺伝子解析、始めます。 -14ページ目

・左から〇文字を抽出

 

$less test1.txt

abcdefg

$less test1.txt | cut -c 1-3

abc

$less test1.txt | cut -c 2-4

bcd

$less test1.txt | cut -c 3

c

 

・特定文字以前を抽出

$less test1.txt

abcdefg

$less test1.txt | cut -dc -f1←「c」より前を抽出

ab

$less test1.txt | cut -dc -f2←「c」より後ろを抽出

defg

$less test2.txt

ab/cd

$less test2.txt | cut -d\/ -f1←「/」より前を抽出(-dオプションの後は/を\でエスケープする)

ab

$less test2.txt | cut -d\/ -f1←「/」より後ろを抽出

cd

シェルスクリプトのコマンドに記載できる引数は無限ではないらしい。何ビットだったか忘れたが、限りがある。genomeを扱っていると、annotation後のgene解析で引数を数千個入れたいときもある。

そんな時には引数をかいたテキストファイルを別に用意し、そのファイルから引数を読み込める。

less hikisuu.txt

ABC

BCD

CDE

DEF

 

less test.sh

/

/

/

echo "key in hikisuu file name with full path"

read file

vvv=$(less ${file} | tr '\n' ' ')

 

for f in ${vvv}

do

/

/

/

done

 

これでhikisuu.txtに記載された、ABC、BCD、CDE、DEFが順に引数fに渡されていく。

 

大量のファイルを2つ以上のディレクトリから1つのディレクトリにコピー、移動する時、ファイルが重複していないか確認しないと勝手に上書きされていたりする。そのため、標準エラー出力をlogとして記録し、確認しないと予期せぬトラブルに。

 

#!/bin/sh

read dir

read path

 

time=$(date +%y%m%d%H%M)
 

for f
do

cp -i ${path}/${f}_mapping_res/${f}.gubbins.fasta ${dir} 2>&1 | tee -a ${dir}/log_${time}.txt

これでlog_${time}.txtに標準エラー出力が出力される。
 

・BioPerlのバージョン確認

perl -MBio::Perl -le 'print Bio::Perl->VERSION;'

 

blastのoutput.txtから必要情報を抽出するのにcutを使うと便利。

でもblastのoutputファイルは総じてスペース区切り。

cut -fが使えない。

そこで

less output.txt | grep hoge | unexpand -a | cut -f1

cat foo.txt | sed 's/[\t ]\+/\t/g' | cut -f3

 

unexpandコマンドでスペース区切りをタブに変換。

-aオプションでその行の全てのスペースをタブに変換してくれる。(-aなしだと、行頭のスペースのみタブに変換)

manualにはphred scoreは自動で認識してくれると書いてあるが、実際にはうまく認識できずerrorが出ることがあるようだ(実際にあった。)

-phred33(Miseq、Hiseq)のオプションはちゃんと記載しておいた方がよい。

sort -nk2

2列目をsort

-n:数字は数字としてsort

3列目でsortなら

sort -nk3