Como apontou a Steeldriver nos comentários, seu terceiro teste será verdadeiro se algum dos três campos não estiver vazio. Eu suponho que você realmente quer algo assim:
for f in *.csv; do
awk -F, '!(NF==6 && $1+0==$1 && $3!="" && $4!="" && $6!=""){f=1; exit}
END{exit f}' "$f" || mv "$f" "$f".bad;
done