フィールドの値を一致させ、一致に基づいてIDを割り当てます。

フィールドの値を一致させ、一致に基づいてIDを割り当てます。
chr:pos1:pos2   Sun     NC      S1      S2      S3      S4      S9      S11     S14     S15     S16     S17     S18     S19     S28     S29     S30     S33     S34     S35     S36     S37     S38     S39
Aradu.A01:100145549:100145556   AG      AA      AA      AA      AA      AA      AA      AA      AA      AA      AA      AA      AA      AA      AA      AA      AA      AA      AA      AA      AA      AA
Aradu.A01:100408119:100408137   CA      TA      0       0       0       TA      TA      TA      TA      TA      TA      TA      TA      TA      TA      TA      TA      TA      TA      TA      TA      0
Aradu.A01:10102206:10102212     TG      TA      TA      TA      TA      0       TG      TA      TA      TA      TG      TG      TG      TG      TG      TA      TG      TG      TA      0       TG      TG
Aradu.A01:10112010:10112029     GA      GG      GG      GG      GG      GG      GA      GG      GG      GG      GA      0       GA      GA      GA      GG      GA      GA      GG      GA      0       GA
Aradu.A01:10112029:10112059     AC      GC      GC      GC      GC      GC      AC      GC      GC      GC      AC      0       AC      AC      AC      GC      AC      0       GC      AC      0       AC
Aradu.A01:101198026:101198058   GT      GC      GC      GC      GT      GC      0       GT      GT      GC      GT      GT      GT      0       GT      GC      GT      GC      GC      GT      0       GT
Aradu.A01:101198058:101198081   TC      CC      CC      CC      TC      CC      0       TC      TC      CC      TC      TC      TC      0       TC      CC      TC      CC      CC      TC      0       TC
Aradu.A01:101306922:101306946   AG      AA      AA      AA      AG      0       AA      AG      AG      AA      0       AG      AG      AG      AG      AA      AG      AG      AA      AG      AG      AG

指定されたファイルで、4列から2列と3列までのすべてのフィールドの値を一致させようとしています。フィールド値(列4以上)が列2フィールドと一致する場合は、列3でS(一致する場合)としてマークし、Nとしてマークし、0の場合は-1を割り当てます。

私が試したことは次のとおりです。

NR>1  {for(i=4;i<=NF;i++)
        { if ( $i == $2 ) $i=S ;
          if ( $i == $3 ) $i=N ;
          if ( $i == 0 ) $i=-1 ;
       } ## if ;
       ## for loop is done
       print ;
       }

その結果、最初の3つのフィールドを除くすべてのフィールドに-1が割り当てられます。

ベストアンサー1

これはトリックを行うようです

NR > 1 {
  for( i=4; i<NF; i++) {
    if( $i == $2 ) {
      $i = "S"
    }
    else if( $i == $3 ) {
      $i = "N"
    }
    else if( $i == 0 ) {
      $i = -1
    }
  }
  print
}

egというファイルに入れて、363142.awk以下を実行してください。

$ awk -f 363142.awk /path/to/input

おすすめ記事