awk split-parameter med char

fil er:

BASH.NIR SH.ABI 

Jeg vil have awk-scriptet for at vise:

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

Jeg ved ikke, hvordan man deler en parameter med tegn. Ideen er:

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

Svar

Du kan bruge strengfunktionerne 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 -funktionen returnerer positionen for det tegn, der skal findes (i dette tilfælde en prik). Og strstr returnerer en understreng. Vi bruger p+1 og p-1 for ikke at inkludere prikken.

Se afsnittet “Strengfunktioner” i awk manpage.

Svar

Du kan bare bruge . som feltseparator:

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

Kommentarer

  • tekstfilen kan a Jeg har også mellemrum
  • @nir Indsæt venligst en prøve af dit nøjagtige input i dit spørgsmål, jeg kan ' ikke gætte hvad det ser ud som medmindre du repræsenterer det ordentligt.
  • @nir – det ' er altid bedst at inkludere reelle eksempler på data. Overleverede data spilder normalt bare svaret ' s tid, da det generelt fører til de forkerte løsninger.
  • du har ret, vil formularen næste gang.

Skriv et svar

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