que je veux faire quelque chose du genre:à l'aide bringue dans un script shell
for i in 1 2 3
do
gawk '{if ($i==$2) {print $0;}}' filename
done
est-ce possible?
grâce
que je veux faire quelque chose du genre:à l'aide bringue dans un script shell
for i in 1 2 3
do
gawk '{if ($i==$2) {print $0;}}' filename
done
est-ce possible?
grâce
Deux interprétations possibles de votre script viennent à l'esprit:
filename
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
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.
De même, '$ 2' se référera au deuxième champ de la ligne en cours de traitement - probablement pas le comportement souhaité. –
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
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
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