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.