awk split parameter door char

bestand is:

BASH.NIR SH.ABI 

Ik wil het awk script laten zien:

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

Ik weet niet hoe ik een parameter moet splitsen op char. Het idee is:

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

Antwoord

U kunt de stringfuncties gebruiken in 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 

De functie index retourneert de positie van het teken dat moet worden gevonden (in dit geval een punt). En strstr retourneert een subtekenreeks. We gebruiken p+1 en p-1 om de punt niet op te nemen.

Kijk voor meer informatie in de sectie “String Functions” van de awk manpage.

Answer

U kunt . gebruiken als veldscheidingsteken:

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

Opmerkingen

  • het tekstbestand kan een dus heb spaties
  • @nir Plak een voorbeeld van je exacte invoer in je vraag, ik kan ' niet raden hoe het eruit ziet zoals tenzij je het correct vertegenwoordigt.
  • @nir – het ' is altijd het beste om echte voorbeeldgegevens op te nemen. Gekunstelde gegevens verspillen meestal de tijd van ' s tijd, omdat het over het algemeen tot de verkeerde oplossingen leidt.
  • je hebt gelijk, zal de volgende keer vorm krijgen.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *