Frage
Ich möchte etwas Derartiges tun:
for i in 1 2 3
do
gawk '{if ($i==$2) {print $0;}}' filename
done
ist das möglich?
Dank
Lösung
Zwei mögliche Interpretationen des Skripts in den Sinn kommen:
- Sie wirklich wollen für "1", "2", und dann "3" als das zweite Feld in
filename
suchen
- Sie wollen eigentlich für die 1'st Shell-Skript Parameter suchen, dann die zweite, ...
Hier sind beide Versionen der Schleife:
for i in 1 2 3; do
gawk "{if (\"$i\"==\$2) {print \$0;}}" filename
done
for i in "$@"; do
gawk "{if (\"$i\"==\$2) {print \$0;}}" filename
done
Andere Tipps
Um hässlich zu vermeiden, zitieren, können Sie glotzen die Variable Gang-Funktion verwenden:
for i in 1 2 3
do
gawk -v param=$i '{if (param==$2) {print $0}}' filename
done
Unter der Annahme, dass Sie die gaffen Skript sein wollen
{if ($1 == $2 ) ... } {if ($2 == $2 ) ... } {if ($3 == $2 ) ... }
Sie tun können:
for i in 1 2 3 do gawk '{if ($'$i'==$2) {print $0;}}' filename done
Na sicher, es ist möglich, aber es wird wahrscheinlich nicht tun, was Sie tun wollen.
... kommen, daran zu denken, was Sie Sie wollen, es zu tun? Es ist nicht wirklich klar, was du geschrieben hast. Eine Sache, die Sie wahrscheinlich ändern müssen, ist die einfachen Anführungszeichen mit doppelten Anführungszeichen zu ersetzen, da Variablen (wie $i
) ist nicht in einfache Anführungszeichen Strings ersetzt in.