fișier este:
BASH.NIR SH.ABI
Vreau scriptul awk să arăt:
User is NIR, SHELL is BASH User is ABI, SHELL is SH
Nu știu cum să împart un parametru după caractere. Ideea este:
cat file.txt | awk "{print "User is " afterDot($1) ", SHELL is " beforeDot($1)}"
Răspuns
Puteți utiliza funcțiile șirului din 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
Funcția index
returnează poziția caracterului de găsit (în acest caz un punct). Și strstr
va returna un subșir. Folosim p+1
și p-1
pentru a nu include punctul.
Pentru mai multe informații, căutați în secțiunea „Funcții de șir” din pagina de manual awk
.
Răspuns
Puteți folosi doar .
ca separator de câmp:
awk -F. "{ print "User is " $2 ", SHELL is " $1 }" file.txt
Comentarii
- fișierul text poate a De asemenea, aveți spații albe
- @nir Vă rugăm să lipiți un eșantion de exact intrare în întrebarea dvs., nu pot ' să ghicesc ce arată cum ar fi dacă nu îl reprezentați corect.
- @nir – este ' întotdeauna cel mai bine să includeți date reale de exemplu. Datele inventate de obicei pierd timpul răspunsului ', deoarece, în general, conduc la soluții greșite.
- ai dreptate, îți vei forma data viitoare.