Você pode explicar com mais clareza exatamente o que você está tentando fazer?
Parece que você está tentando imprimir os valores x, y e z
( $4 , $5 e $6 ) das próximas seis linhas
depois de uma linha que contém um literal z seguido por um ~ .
Mas isso não faz muito sentido - a menos que você tenha um padrão de repetição
de um cabeçalho, cinco linhas de dados, outro cabeçalho, outras cinco linhas de dados,
etc - e, se for esse o caso, você realmente precisa explicar isso.
E se é isso que você está tentando fazer, por que você está fazendo isso?
com for(i=-2; i<=3; i++) em vez de for(i=1; i<=6; i++) .
E isso não é uma boa maneira de usar getline .
Se eu entender corretamente seu objetivo, tudo que você precisa é
awk 'NF==7 {print $4, $5, $6}' filename
Isso imprimirá os 4º, 5º e 6º campos (x, ye z) de cada linha que tem sete campos e ignora todo o resto.