To feltseparatorer (kolon og mellemrum) i awk

Hvordan kan vi angive to feltadskillere i kommandoen awk, når en af dem er mellemrum? Jeg tror, dette kan gøres ved at bruge en integreret if-else-tilstand i awk, men jeg er ikke sikker på den nøjagtige kommando.

Eksempelfilen er som nedenfor:

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

Jeg vil udskrive den anden kolonne ($ 2). Forventet output er:

Engineer Doctor GovntJob Master 

Da jeg forsøgte at placere både mellemrum og kolon som feltseparatorer, mislykkedes det med en syntaksfejl:

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

Hvordan kan vi bruge to feltadskillere og bruge awk-funktionalitet?

Kommentarer

  • Ud over Yeti ' s svar, husk at skallen deler sig med ikke-citeret hvidt mellemrum for at oprette listen over argumenter til awk, så i stedet for -F[ :] (en arg) det fik -F[: og ]. Dette diagram er ret praktisk (bemærk de lodrette pile for enkelt / dobbelt anførselstegn).
  • Tak ArielCo, meget værdsat!

Svar

Du er på rette spor!
Tilføj bare de manglende anførselstegn omkring [ :]:

awk -F"[ :]" "{print $2}" test.txt Engineer Doctor GovntJob Master 

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *