2010-09-30 9 views
2

Awk est génial de la manipulation de texte, mais un peu opaque pour moi. Je voudrais exécuter une commande awk qui se résume à quelque chose comme çaAffecter une variable sur chaque ligne dans une commande quick awk

awk '{$x = ($3 > 0 ? 1 : -1); print $1*$x "\t" $2*$x}' file 

Je veux attribuer $x sur chaque ligne, à savoir ne pas utiliser l'option -v, puis l'utiliser dans ma déclaration d'impression. Malheureusement, après le ; awk a oublié les valeurs de $1 et $2. Et mettre la tâche en dehors des accolades ne semble pas fonctionner non plus. Comment cela marche-t-il?

Répondre

4

AWK ne pas utiliser des signes dollar sur ses variables:

awk '{x = ($3 > 0 ? 1 : -1); print $1*x "\t" $2*x}' file 

Dans votre version que vous affectez un 1 ou -1 à 0 $ (la ligne d'entrée entière) depuis x==0 (efficace) lorsque le premier ligne du fichier d'entrée est lu. C'est pourquoi $1 et $2 semblent être "oubliés".

+0

oui, awk est comme C, pas comme Perl –