awk split parameter by char

file is:

BASH.NIR SH.ABI 

Chci awk skript ukázat:

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

Nevím, jak rozdělit parametr podle znaků. Myšlenka je:

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

Odpověď

Řetězcové funkce můžete použít v 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 

Funkce index vrací pozici hledaného znaku (v tomto případě tečku). A strstr vrátí podřetězec. K zahrnutí tečky používáme p+1 a p-1.

Další informace naleznete v části „Řetězcové funkce“ na stránce awk.

Odpověď

Jako oddělovač polí můžete použít .:

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

Komentáře

  • textový soubor může a Máte také mezery
  • @nir Vložte prosím svůj dotaz přesný do své otázky, nemohu ' odhadnout, jak to vypadá jako, pokud to nepředstavujete správně.
  • @nir – vždy je nejlepší ' zahrnout skutečná ukázková data. Vymyšlená data obvykle jen ztrácejí čas ' času, protože obvykle vedou k nesprávným řešením.
  • Máte pravdu, příště se vytvoří formulář.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *