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ář.