모든 필드에 특정 값이 있는 행 수를 계산하는 방법은 무엇입니까?

모든 필드에 특정 값이 있는 행 수를 계산하는 방법은 무엇입니까?

내 파일은 다음과 같습니다.

SRR008602 97 99 99 99 98 99  98  11
SRR009633 99 99 99 99 99 100 100 10
SRR022120 0  0  0  0  0  0   0   0
SRR026121 0  0  0  0  0  0   0   0
SRR008724 80 79 99 99 99 99 99   18

2열부터 9열까지의 값이 "0"인 행 수를 계산하고 싶습니다. 나는 awk해결책을 선호합니다. 이것이 제가 생각해낸 것이고 작동합니다. 하지만 이 작업을 수행하는 더 좋은 방법이 있어야 한다고 확신합니다.

awk '$2 == 0 && $3 == 0 && $4 == 0 && $5 == 0 && $6 == 0 && $7 == 0 && $8 == 0 && $9 == 0 {n++}; END {print n}' input.txt

답변1

Awk의 KISS :

awk '{for (i=2;i<=9;i++) if ($i != 0) next; n++} END {print n}' file

진주:

perl -anE '$n += 8 == grep { $_ == 0 } @F[1..8] }{ say $n' file

또는 (Glenn Jackman이 제안한 대로)목록::유틸리티기준 치수

perl -MList::Util=all -anE '$n++ if all {$_ == 0} @F[1..8]} {say $n' file

답변2

awk의 입력은 약간 적습니다. 이러한 필드의 연결을 0의 연결과 비교하십시오.

awk '$2$3$4$5$6$7$8 == "0000000" {++n} END { print n }' input.txt

답변3

입력 데이터가 삭제되었으면 좀 더 간결해질 수 있습니다.

awk '$2+$3+$4+$5+$6+$7+$8+$9 == 0 {n++} END {print n}'

답변4

또 다른 awk방법:

awk '{$1=""} $0 !~ /[1-9]/{seen++} END{print seen}' infile
2

또는 9개 이상의 열이 있고 2~9개만 확인하려는 경우:

awk '$2$3$4$5$6$7$8$9 !~ /[1-9]/{seen++} END{print seen}' infile
2

관련 정보