練習問題①
シロイヌナズナの遺伝子配列が記載されたFASTAファイルをhttps://www.arabidopsis.org/download_files/Genes/TAIR6_genome_release/TAIR6_seq_20060907 からダウンロードする。(wgetコマンドを使用)
1.FASTAファイルのレコード数(遺伝子数)を算出せよ
FASTAファイルのレコードは”>”から始まります。 1文字目を切り出すには・・・substr($0,1,1)
awk '
{
if(substr($0,1,1)==">"){
cnt=cnt+1
}
}
END{
print cnt
}
' TAIR6_seq_20060907
35351
2.塩基配列の平均長を算出せよ
改行を考慮して各レコードの塩基配列長を取得して下さい。 (本来は改行コードをod -c で確認する必要あり。)
awk '
{
if(substr($0,1,1)==">"){
if(NR>1){
print "previous read length:" readlen;
cntbp=cntbp+readlen;
cnt=cnt+1;
}
readlen=0;
}else{
readlen=readlen+length($0);
}
}
END{
print "previous read length:" readlen;
cntbp=cntbp+readlen;
cnt=cnt+1;
print cntbp/cnt
}
' TAIR6_seq_20060907
2229.55
3.最大、最小の配列長を算出せよ
awk '
BEGIN{min=1e+10} #<=10,000,000,000のこと
{
if(substr($0,1,1)==">"){
if(NR>1){
if(readlen>max){max=readlen}
if(readlen<min){min=readlen}
}
readlen=0;
}else{
readlen=readlen+length($0);
}
}
END{
if(readlen>max){max=readlen}
if(readlen<min){min=readlen}
print max, min
}
' TAIR6_seq_20060907
max: 31258 min: 22
練習問題②
1.Day1の時に使用したOSシェア別割合のデータinput.txtを連想配列に読み込む。(OS名をキーとして配列を作成する)
awk '
{
data[$1]=$2
}
' input.txt
2.ChromeOSのシェアを%付きで表示する
awk '
{
data[$1]=$2
}
END{
print data["ChromeOS"];
}
' input.txt
3.シェアの高い順にOSを表示する
awk '
{
data[$1]=$2
}
END{
PROCINFO["sorted_in"]="@val_num_desc";
for(i in data){
print i"\t"data[i];
}
}
' input.txt
4.OSの名前順(辞書順)にOS, シェアをタブ区切りで表示する。タブ文字はAWKでは“\t”です。
awk '
{
data[$1]=$2
}
END{
PROCINFO["sorted_in"]="@ind_str_asc";
for(i in data){
print i"\t"data[i];
}
}
' input.txt
5.先頭の3文字が「Win」、「Mac」、「Lin」、「Chr」、「Unk」のOSシェアを集計し、シェアの高い順に上記5個のカテゴリをシェアとともに表示する。
awk '
{
data[substr($1,1,3)]=data[substr($1,1,3)]+$2
}
END{
PROCINFO["sorted_in"]="@val_num_desc";
for(i in data){
print i"\t"data[i];
}
}
' input.txt
練習問題①の続き
4.FASTAファイルを読み込み、「配列の名前(タブ「\t」)配列」と1レコード1行のタブ区切りで表示するようにせよ
ヒント:AWKの特殊変数であるORS(出力の区切り文字)を変更する =>デフォルトは\n
配列の名前の行で改行し、それ以外の行では区切り文字なし(“”)で出力してみる
2文字目以降を切り出す場合は、単にsubstr($1,2)とすればよい。
5.4.のタブ区切りテキストを用いて配列を長い順に表示し、ファイルに保存せよ ファイルに保存する際は、 awk '{…}' > filename とすればよい。