2009-09-13 10 views

Répondre

0

Deux interprétations possibles de votre script viennent à l'esprit:

  1. Vous avez vraiment voulez rechercher "1", "2", puis "3" comme deuxième champ dans filename
  2. Vous voulez vraiment rechercher le paramètre de script shell 1'st, puis le second, ...

Voici les deux versions de la boucle:

for i in 1 2 3; do 
    gawk "{if (\"$i\"==\$2) {print \$0;}}" filename 
done 
for i in "[email protected]"; do 
    gawk "{if (\"$i\"==\$2) {print \$0;}}" filename 
done 
+0

le "1 2 3" où juste pour avoir la sensation. Ils auraient pu être "i in 'a' 'b' 'c'", et ainsi de suite .. Donc l'option 1 est ce que je cherchais – Guy

0

Bien sûr, il est possible, mais il ne sera probablement pas faire ce que vous voulez qu'il fasse.

... en penser, que faire voulez-vous faire? Ce n'est pas vraiment clair d'après ce que vous avez écrit. Une chose que vous devrez probablement changer est de remplacer les guillemets simples par des guillemets doubles parce que les variables (comme $i) ne sont pas remplacées par des guillemets simples.

+0

De même, '$ 2' se référera au deuxième champ de la ligne en cours de traitement - probablement pas le comportement souhaité. –

1

En supposant que vous voulez que le script gawk être

 
{if ($1 == $2) ... } 
{if ($2 == $2) ... } 
{if ($3 == $2) ... } 

vous pouvez faire:

 
for i in 1 2 3 
do 
    gawk '{if ($'$i'==$2) {print $0;}}' filename 
done 
3

Afin d'éviter laid citant , vous pouvez utiliser la fonction de passage variable de gawk:

for i in 1 2 3 
do 
    gawk -v param=$i '{if (param==$2) {print $0}}' filename 
done 
Questions connexes