awk を使って行の要素がすべて0 の行を除外する

RNAseqをしているが、行に5つくらいのデータがあって、それらすべてが0 の行を取り除きたいのだが、いい方法はないかと聞かれた。
列和であれば、$2 とかしてすぐに結果が出せるのはぐぐってよく出る。
しかし、行和をどうこうするのはなかなか出てこない。
 
というわけで、行がいくつあるかの変数 NF と、行についてfor を回して0 かどうかの論理判断をして、すべて0 だった場合は除外、そうでなければprint して残す、というif 文でゴリ押しする。
 
R のワンライナーで適当にinput.txt を作成する

R -q -e 'nr<-8;nc<-5;a<-matrix(runif(nr*nc,1,10),nr);a[3,]<-0;a[sample(seq(a), 6)]<-0;write.table(a,"input.txt",quote=F,col.names=F)'
cat input.txt
1 7.884 0 7.431 7.233 7.049
2 9.302 5.414 8.19 2.165 1.838
3 0 0 0 0 0
4 6.113 8.062 3.974 6.062 6.251
5 7.478 5.364 0 2.168 3.363
6 6.258 3.689 8.887 3.095 1.854
7 3.396 1.824 0 1.51 1.189
8 3.728 1.779 0 0 8.062

ここで、1列目には遺伝子名がはいっているらしく、行がすべて0 なのは3行目、あとはダミーで適当に0 のセルを作っている。
 
ということで、for は2列目から参照して、最後の列 NF まで回す。
その最中に、sum という箱を用意しておいて、真偽判定で真なら0、偽なら1 が入るように加算して、最終的にsum が0 かどうかを判定してprint するかどうか決める。

awk '{sum=0; for(i=2;i<=NF;i++){sum+=($i!=0)}; if(sum!=0) print $0}' input.txt
1 7.884 0 7.431 7.233 7.049
2 9.302 5.414 8.19 2.165 1.838
4 6.113 8.062 3.974 6.062 6.251
5 7.478 5.364 0 2.168 3.363
6 6.258 3.689 8.887 3.095 1.854
7 3.396 1.824 0 1.51 1.189
8 3.728 1.779 0 0 8.062

3行目だけ削除できた。