2016-04-27 13 views
0

Ich habe Probleme, das den Weg zur Arbeit:Iterate über Felder und drucken nur die passende Regex

awk -F ";" '{for(i=1; i < NF;i++) $i ~ /^_.*/ {print $i}}' 

Ich möchte alle iterieren die Felder (Datensätze können 7-9 haben) und drucken Sie nur diejenigen, die beginnen mit einem _ mit Ausnahme der Zeile oben gibt mir einen Syntaxfehler bei der print-Anweisung und wenn ich die {print $i} weglassen bekomme ich keine Ausgabe.

Wie ist der richtige Weg dies zu tun?

Antwort

3

Sie verpassen eine if:

awk -F ";" '{for(i=1; i < NF;i++) if($i ~ /^_.*/) {print $i}}' 

Die Struktur eines awk-Programm ist condition { action } aber, was Sie haben zur Zeit ist alles in einem Aktionsblock (die Bedingung ist wahr Standard). Innerhalb des Aktionsblocks ist die if nicht implizit.

Nebenbei ist die .* im Muster redundant; Sie können auch /^_/ verwenden, um eine beliebige Zeichenfolge beginnend mit _ zu finden.

+1

Richtig und das '. *' In '/^_.*/' tut nichts, da es kein oder mehr Vorkommen irgendeines Zeichens bedeutet, also wird '/^_ /' allein für genau die gleichen Felder wahr wie es wäre sei wahr für '/^_.*/'. –