합계가 0인 행 삭제

합계가 0인 행 삭제

모든 열의 값이 0인 경우(즉, 행의 합이 0인 경우) 파일의 모든 행을 삭제해야 합니다.

내 파일은 다음과 같습니다(열 13개, 행 60000개, 탭으로 구분).

KO  gene    S10 S11 S12 S1  S2  S3  S4  S5  S6  S7  S8  S9
K02946  aap:NT05HA_2163 0   0   0   0   1   0   8   0   0   5   0   0
K06215  aar:Acear_1499  0   0   0   0   0   0   8   0   0   0   0   0
K00059  acd:AOLE_11635  0   0   5   0   0   0   0   0   8   0   0   0
K00991  afn:Acfer_0744  0   0   0   0   0   0   0   0   0   0   0   0
K01784  aha:AHA_2893    0   0   0   0   0   0   7   0   0   0   0   0
K01497  amd:AMED_3340   0   0   0   0   0   0   0   0   0   0   0   0

어떡해?

답변1

해결책을 원한다면 awk:

awk '{s=0; for (i=3;i<=NF;i++) s+=$i; if (s!=0)print}' infile > outfile

스크립트를 시작하기 위해 첫 번째 줄을 두 번째 줄의 제목으로 유지하려면 다음을 수행하십시오.

awk 'NR > 1{s=0; for (i=3;i<=NF;i++) s+=$i; if (s!=0)print}' infile > outfile

답변2

열에 음수가 아닌 숫자만 포함된 경우 0보다 큰 숫자가 포함된 필드가 하나 이상 포함된 행을 인쇄하세요.

그리고 perl:

$ perl -MList::Util=first -anle '
  print if first {$_ > 0} @F or $. == 1;
' file
KO  gene    S10 S11 S12 S1  S2  S3  S4  S5  S6  S7  S8  S9
K02946  aap:NT05HA_2163 0   0   0   0   1   0   8   0   0   5   0   0
K06215  aar:Acear_1499  0   0   0   0   0   0   8   0   0   0   0   0
K00059  acd:AOLE_11635  0   0   5   0   0   0   0   0   8   0   0   0
K01784  aha:AHA_2893    0   0   0   0   0   0   7   0   0   0   0   0

너는 읽어야 해이 문제솔루션을 사용하는 경우 보안상의 이유로 perl.

그리고 awk:

$ awk 'FNR == 1{print;next}{for(i=3;i<=NF;i++) if($i > 0){print;next}}' file

관련 정보