2016-08-08 45 views
1

Ich versuche, eine For-Schleife Index i in awk übergeben, aber immer wieder unerwartete token awk Fehler.Übergabe für Schleife Index in awk

Zuerst habe ich versucht, die Option -v in awk mit:

for i in "${myarray}" 
awk -v var=$i '/var/{print}' myfile.dat 
done 

Ich versuchte auch einfache Anführungszeichen direkt mit der Variable Aufruf: a

for i in "${myarray}" 
awk '/'"$i"'/{print}' myfile.dat 
done 

Mein Endziel ist es zu lernen, wie man passieren For-Schleife Indexvariable durch awk als Suchmuster. Ich möchte, dass der obige Code myfile.dat durchsucht und Zeilen druckt, die die Zeichenfolgen in myarray enthalten.

+0

Beachten Sie, dass Sie mit ziemlicher Sicherheit weder wollen noch brauchen eine Shell-Schleife: http://unix.stackexchange.com/questions/169716/ Why-is-Using-a-Shell-Schleife-zu-Prozess-Text-betrachtet-schlechte-Praxis –

Antwort

2

Es gibt zwei Probleme:

  1. Array Verfahrgeschwindigkeit wie diesen for i in "${myarray[@]}"
  2. awk behandelt Text zwischen /.../ als regex wörtlichen, zu verwenden, um einen variablen Einsatz $0 ~ var sein sollte.

sollte Ihr Code sein:

for i in "${myarray[@]}"; do 
    awk -v var="$i" '$0 ~ var' myfile.dat 
done 

{print} ist Standardaktion in awk, die Sie weglassen können, wie oben gezeigt.

0

Sie können die gleiche Schleife tun frei wie auch zB

echo "${myarray[@]}" | tr ' ' '|' | awk 'NR==FNR{pat=$0; next} $0 ~ pat' - file