모든 열의 값이 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