shellでtsvをiterateする

タブ区切りでいくつかの要素のあるファイルを一行ずつ読み込み、カラムごとに別々の役割を持たせて処理をしたい。shellでの配列を使うとうまくいく。具体的にはsample.txtという

chr	id	dist	pos
22	rs100000	0	1000000
21	rs200000	0	2000000

みたいなどこかで見たようなファイルがあった時、chrで参照先ファイルを選んで、その参照先ファイル内でidを検索したいというタスクがあるとする。参照先ファイルはchr22.txtみたいな形になっているとする。一行ずつアレイで読み込んで処理することになる。

while read line; do
  arr=(`echo $line`)
  grep ${arr[1]} chr${arr[0]}.txt
done < sample.txt

${arr[0]}もしくは$arrとすると一番目の要素、${arr[1]}とすると二番目の要素、となる。ちなみにアレイの内容すべてを表示するのはarr[*]もしくはarr[@]である。

このブログの人気の投稿

Inverse-normal transformation

SKAT

locuszoom