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

War es hilfreich?

Lösung

Zwei mögliche Interpretationen des Skripts in den Sinn kommen:

  1. Sie wirklich wollen für "1", "2", und dann "3" als das zweite Feld in filename
  2. suchen
  3. 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top