awk 스크립트는 각 줄의 0을 세고 0이 20% 미만인 줄을 인쇄합니다. 각 행은 네 번째 필드 0부터 계산을 시작합니다.

awk 스크립트는 각 줄의 0을 세고 0이 20% 미만인 줄을 인쇄합니다. 각 행은 네 번째 필드 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

당신이 가지고 있는 것은 가깝지만 각 레코드만 인쇄한 다음 요청한 것이 아닌 각 레코드에 대한 누적 0 수를 인쇄합니다.

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
  }
}

논리는 상당히 자명해야 합니다.

관련 정보