filen är:
BASH.NIR SH.ABI
Jag vill ha awk-skriptet att visa:
User is NIR, SHELL is BASH User is ABI, SHELL is SH
Jag vet inte hur man delar upp en parameter med tecken. Idén är:
cat file.txt | awk "{print "User is " afterDot($1) ", SHELL is " beforeDot($1)}"
Svar
Du kan använda strängfunktionerna 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
Funktionen index
returnerar positionen för tecknet som ska hittas (i detta fall en punkt). Och strstr
returnerar en delsträng. Vi använder p+1
och p-1
för att inte inkludera punkten. / p>
Mer information finns i avsnittet ”Strängfunktioner” i awk
manpage.
Svar
Du kan bara använda .
som fältseparator:
awk -F. "{ print "User is " $2 ", SHELL is " $1 }" file.txt
Kommentarer
- textfilen kan a Jag har även blanksteg
- @nir Klistra in ett exempel på din exakta ingång i din fråga, jag kan ' inte gissa hur det ser ut som om du inte representerar det ordentligt.
- @nir – det ' är alltid bäst att ta med verkliga exempeldata. Konvergerad data slösar vanligtvis bara bort svaret ' eftersom det i allmänhet leder till fel lösningar.
- du har rätt, kommer att formas nästa gång.