내 파일은 다음과 같습니다.
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