awk pour la boucle avec if else conditions de tableau

Je sollicite votre aide dans le stockage de awk retour des valeurs dans un tableau pour mon awk pour la boucle à l'aide de if else conditions.

If  $3 == $7
then print $9 multiplied by $4
else print $4 multiplied by (2 minus $9)

J'ai eu ce travail jusqu'à présent par:

awk '{if ($3 == $7) print $9*$4; else print $4*(2-$9);}' file >outfile

le code ci-dessus fonctionne pour la première colonne de données ($9). Cependant, je tiens à boucle sur toutes les colonnes de 9 à 1547 et retourne un tableau contenant les valeurs de retour. Cela devrait être assez simple, mais je ne peux pas l'air de comprendre certains concepts de base ici.

Jusqu'à présent, je comprends la nécessité de déclarer le nombre de boucles, avant la fonction, par:

awk ' {for(i=9;i<=NF;i++)} END {if ($3 == $7) print $i*$4; else print $4*(2-$i);}'

Cependant, comment et quand déclarer le tableau est au delà de moi (biologiste). Toute aide serait très appréciée.

Exemple:

d'entrée (gros fichier.. ici colonne de 1 à 10):

rs2070501 22 Un 0.0206 0.337855 rs2070501 G Un 0.977 0.066

de sortie:

0.0210738

ici l'instruction else coups de pied dans ($3 * (2-$9)

Comment obtenir awk pour imprimer le tableau 9-Nième, et pas seulement la colonne 9

Qu'entendez-vous par "retourner un tableau"? Pouvez-vous montrer de l'échantillon d'entrée et de sortie?
Le END bloc est ce qui se passe lorsque toutes les lignes ont été lus. Voulez-vous dire quelque chose comme awk '{ for(i=9; i<=NF; ++i) printf "%s%i", (i==9 ? "" : " "), ($3 == $7 ? $i*$4 : $4*(2-$i)); printf "\n" }' peut-être?
votre code semble prometteur, mais ne renvoie que des "0" dans chaque cellule. Mais il a le bon nombre de colonnes.
Le %i code de mise en forme est pour les entiers; changer à %f pour des flotteurs.
exception en effet.. Toutes les lignes sont traitées, mais pas toutes les colonnes.

OriginalL'auteur MortenM | 2012-05-30