Zwei Feldtrennzeichen (Doppelpunkt und Leerzeichen) in awk

8

Wie können wir zwei Feldtrennzeichen im Befehl awk angeben, wenn eines davon Leerzeichen ist? Ich denke, dies kann durch die Verwendung einer eingebetteten if-else-Bedingung in awk erreicht werden, bin mir jedoch nicht sicher über den genauen Befehl.

Beispieldatei ist wie folgt:

cat test.txt
Swapnil Engineer 20000
Avinash:Doctor:30000
Dattu GovntJob 50000
Amol:Master:10000

Ich möchte die zweite Spalte drucken ($ 2). Die erwartete Ausgabe ist:

Engineer
Doctor
GovntJob
Master

Als ich versuchte, sowohl Leerzeichen als auch Doppelpunkt als Feldtrennzeichen zu verwenden, schlug dies mit einem Syntaxfehler fehl:

awk -F[ :] '{print $2}' test.txt
awk: cmd. line:1: :]
awk: cmd. line:1: ^ syntax error

Wie können wir zwei Feldtrennzeichen verwenden und die awk-Funktionalität nutzen?

Swapnil Dhule
quelle
Denken Sie zusätzlich zu Yetis Antwort daran, dass sich die Shell durch nicht zitierte Leerzeichen aufteilt, um die Liste der Argumente für awk zu erstellen. Anstelle von -F[ :](einem Argument ) erhielt sie -F[:und ]. Dieses Diagramm ist sehr praktisch (beachten Sie die vertikalen Pfeile für einfache / doppelte Anführungszeichen).
ArielCo
Vielen Dank, ArielCo, sehr geschätzt!
Swapnil Dhule

Antworten:

13

Du bist auf dem richtigen Weg!
Fügen Sie einfach die fehlenden Anführungszeichen hinzu [ :]:

awk -F'[ :]' '{print $2}' test.txt
Engineer
Doctor
GovntJob
Master
Swapnil Dhule
quelle