awkスクリプトは各行のゼロをカウントし、0が20%未満の行を印刷します。各行は、4番目のフィールド0から計算を開始します。

awkスクリプトは各行のゼロをカウントし、0が20%未満の行を印刷します。各行は、4番目のフィールド0から計算を開始します。
 Chr     Position1       Position2       S1      S2      S3      S4      S9      S11     S14     S15     S16     S17     S18     S19     S28     S29     S30     S33     S34     S35     S36     S37     S38
Aradu.A01       100145549       100145556       AA      AA      AA      AA      AA      AA      AA      AA      AA      AA      AA      AA      AA      AA      AA      AA      AA      AA      AA      AA
Aradu.A01       100246832       100246837       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0
Aradu.A01       100246837       100246846       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0
Aradu.A01       100345681       100345688       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0
Aradu.A01       100408092       100408119       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0
Aradu.A01       100408119       100408137       0       0       0       TA      TA      TA      TA      TA      TA      TA      TA      TA      TA      TA      TA      TA      TA      TA      TA      0
Aradu.A01       100425855       100425856       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0
Aradu.A01       100425856       100425857       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0
Aradu.A01       100431071       100431075       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0
Aradu.A01       10051925        10051981        GT      GT      0       0       GT      0       0       0       0       0       0       GT      GT      GT      0       0       0       GT      GT      0
Aradu.A01       100616716       100616718       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0
Aradu.A01       100616718       100616750       0       0       0       0       0       0       CT      0       0       0       0       0       0       0       0       0       0       0       0       0
Aradu.A01       100757232       100757233       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0
Aradu.A01       100761215       100761271       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0       0
Aradu.A01       10078917        10078920        CT      0       0       CC      0       CC      CC      CC      0       CC      CC      CC      0       CC      0       0       0       0       CT      0

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

awk '{ for (i=4; i<=NF; i++){if ($i=0) {count++}} print $0"\t"count}' input_file|less -S  

ベストアンサー1

あなたが持っているものは近いですが、各レコードだけを印刷してから、要求されていない各レコードの累積ゼロ数を印刷します。

awk '{ zeroes=0; for( i=4; i<NF; i++ ) { if( $i == 0 ) {zeroes++} } if( zeroes / (NF-3) < 0.2 ) { print $0 } }' /path/to/input

もう少し読みやすいです。

{
  zeroes=0
  for( i=4; i<NF; i++ ) {
    if( $i == 0 ) {
      zeroes++
    }
  }
  if( zeroes/(NF-3) < 0.2 ) {
    print $0
  }
}

論理はかなり自明でなければなりません。

おすすめ記事