2017-11-22 6 views
1

Mit awk, ich möchte alle Zeilen drucken, die eine Zeichenfolge in der ersten Spalte, die mit beginnt 22_mit einer Wildcard in awk

ich folgenden versucht, aber offensichtlich * nicht als Platzhalter in awk arbeiten:

awk '$1=="22_*" {print $0}' input > output 

Ist das in awk möglich?

Antwort

2

Beginnen wir mit einer Testdatei starten:

$ cat >file 
22_something keep 
23_other omit 

nur Linien zu halten, die mit 22_ beginnen:

$ awk '/^22_/' file 
22_something keep 

Alternativ, wenn Sie ausdrücklich das erste Feld verweisen bevorzugen, die wir verwenden könnten

$ awk '$1 ~ /^22_/' file 
22_something keep 

Beachten Sie, dass wirnicht schreiben müssennach der Bedingung, da dies genau die Standardaktion ist, die awk mit einer Bedingung verknüpft.

Am Anfang eines regulären Ausdrucks entspricht ^ dem Anfang einer Zeile. Wenn Sie also 22_ am Anfang einer Zeile oder am Anfang eines Feldes eingeben möchten, möchten Sie ^22_ schreiben.

Im Zustand $1 ~ /^22_/ ist zu beachten, dass der Operator ~ lautet. Dieser Operator sagt awk, ob die vorhergehende Zeichenfolge ~ 41 , matches the regular expression^22_ ~ `ist, wir würden stattdessen awk nach einer genauen Übereinstimmung fragen.

+1

Vielen Dank! Ich lerne weiter hier :) – Abdel