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.