awk split-parameter med char (Svenska)

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.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *