awk delt parameter med char

fil er:

BASH.NIR SH.ABI 

Jeg vil ha awk-skriptet for å vise:

User is NIR, SHELL is BASH User is ABI, SHELL is SH 

Jeg vet ikke hvordan jeg skal dele en parameter etter tegn. Ideen er:

cat file.txt | awk "{print "User is " afterDot($1) ", SHELL is " beforeDot($1)}" 

Svar

Du kan bruke strengfunksjonene i awk.

$ (echo BASH.NIR; echo SH.ABI FOOBAR) | awk "{p=index($1,".");print "User is", substr($1,p+1) ", SHELL IS", substr($1,0,p-1)}" User is NIR, SHELL IS BASH User is ABI, SHELL IS SH 

index -funksjonen returnerer posisjonen til tegnet som skal finnes (i dette tilfellet en prikk). Og strstr returnerer en understreng. Vi bruker p+1 og p-1 for ikke å inkludere prikken.

For mer informasjon, se «Strengfunksjoner» -delen av awk manpage.

Svar

Du kan bare bruke . som feltseparator:

awk -F. "{ print "User is " $2 ", SHELL is " $1 }" file.txt 

Kommentarer

  • tekstfilen kan a Jeg har også mellomrom
  • @nir Vennligst lim inn et utvalg av nøyaktig innspill i spørsmålet ditt, jeg kan ' ikke gjette hva det ser ut som med mindre du representerer det ordentlig.
  • @nir – det ' er alltid best å ta med reelle eksempeldata. Overførte data kaster vanligvis bare bort svaret ' sin tid siden det generelt fører til feil løsninger.
  • du har rett, vil skjema neste gang.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *