2022awk7回答例

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

次のリビジョン
前のリビジョン
2022awk7回答例 [2022/05/23 08:21] – 作成 suikou2022awk7回答例 [2022/05/23 08:54] (現在) – [より簡潔な回答例:] suikou
行 24: 行 24:
 } }
 { {
-    length(ARGV) 
     if(FILENAME==ARGV[1]){     if(FILENAME==ARGV[1]){
         if(FNR%2==0){         if(FNR%2==0){
行 60: 行 59:
     }     }
 }' sample1.fasta  sample2.fasta  sample3.fasta  sample4.fasta }' sample1.fasta  sample2.fasta  sample3.fasta  sample4.fasta
 +```
 +
 +
 +### より簡潔な回答例:
 +
 +```
 +awk -F'\t' '
 +BEGIN{
 +    ORS="";
 +}
 +{
 +    for(i=1;i<=length(ARGV)-1;i++){ #ARGV[0]はプログラム名(awk)が入っているため、-1しないと引数の数にはならない
 +        if(FILENAME==ARGV[i]){
 +            if(FNR%2==0){
 +                data[i][$0]=data[i][$0]+1;
 +                seq[$0]=1;
 +            }
 +        }
 +    }
 +}
 +END{
 +    #ヘッダー行の出力
 +    print "id";
 +    for(j=1;j<=length(ARGV)-1;j=j+1){
 +        print "\t"ARGV[j];
 +    }
 +    print "\n";
 +    #数値データの出力
 +    for(i in seq){
 +        print i;
 +        for(j=1;j<=length(ARGV)-1;j=j+1){
 +            print "\t"data[j][i]+0;
 +        }
 +        print "\n";
 +    }
 +}' sample*.fasta
 +```
 +
 +### より簡潔な回答例2:
 +
 +```
 +awk -F'\t' '
 +BEGIN{
 +    ORS="";
 +}
 +{
 +    if(FNR%2==0){
 +        data[FILENAME][$0]=data[FILENAME][$0]+1;
 +        seq[$0]=1;
 +    }
 +}
 +END{
 +    #ヘッダー行の出力
 +    print "id";
 +    for(j=1;j<=length(ARGV)-1;j=j+1){
 +        print "\t"ARGV[j];
 +    }
 +    print "\n";
 +    #数値データの出力
 +    for(i in seq){
 +        print i;
 +        for(j=1;j<=length(ARGV)-1;j=j+1){
 +            print "\t"data[ARGV[j]][i]+0;
 +        }
 +        print "\n";
 +    }
 +}' sample*.fasta
 +```
 +
 +### 4.連結した一覧表の各サンプル当たりのリード数が1万になるように標準化せよ
 +### 5.補正されたリード数の平均値が多い順にテーブルをソートせよ。
 +
 +### 回答例
 +
 +```
 +awk -F'\t' '
 +BEGIN{
 +    ORS="";
 +}
 +{
 +    if(FNR%2==0){
 +        data[FILENAME][$0]=data[FILENAME][$0]+1;
 +        seq[$0]=1;
 +    }
 +}
 +END{
 +    #まずサンプルごとのリード数を算出する
 +    for(j=1;j<=length(ARGV)-1;j=j+1){
 +        for(i in data[ARGV[j]]){
 +            total[j]=total[j]+data[ARGV[j]][i];
 +        }
 +    }
 +    #サンプルごとに合計1万リードになるように補正
 +    for(j=1;j<=length(ARGV)-1;j=j+1){
 +        for(i in data[ARGV[j]]){
 +            data[ARGV[j]][i]=data[ARGV[j]][i]*10000/total[j];
 +            #ついでに全サンプル合計した配列ごとのカウント値を計算しておく
 +            cnt[i]=cnt[i]+data[ARGV[j]][i];
 +        }
 +    }
 +
 +    #ヘッダー行の出力
 +    print "id";
 +    for(j=1;j<=length(ARGV)-1;j=j+1){
 +        print "\t"ARGV[j];
 +    }
 +    print "\n";
 +    #数値データの出力
 +    PROCINFO["sorted_in"]="@val_num_desc";
 +    for(i in cnt){
 +        print i;
 +        for(j=1;j<=length(ARGV)-1;j=j+1){
 +            print "\t"data[ARGV[j]][i]+0;
 +        }
 +        print "\n";
 +    }
 +}' sample*.fasta
 ``` ```
  • 2022awk7回答例.1653294084.txt.gz
  • 最終更新: 2022/05/23 08:21
  • by suikou