awk split parametru după char

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.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *