Il parametro awk split per char

file è:

BASH.NIR SH.ABI 

Voglio lo script awk da mostrare:

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

Non so come dividere un parametro per char. Lidea è:

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

Risposta

Puoi utilizzare le funzioni stringa in 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 

La funzione index restituisce la posizione del carattere da trovare (in questo caso un punto). E strstr restituirà una sottostringa. Utilizziamo p+1 e p-1 per non includere il punto.

Per ulteriori informazioni, consultare la sezione “Funzioni stringa” della awk manpage.

Risposta

Puoi semplicemente utilizzare . come separatore di campo:

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

Commenti

  • il file di testo può a Ho anche degli spazi bianchi
  • @nir Per favore incolla un campione del tuo input esatto nella tua domanda, non posso ' indovinare che aspetto ha come a meno che tu non lo rappresenti correttamente.
  • @nir – ' è sempre meglio includere dati di esempio reali. I dati artificiosi di solito sprecano solo il tempo della risposta ' poiché generalmente portano a soluzioni sbagliate.
  • hai ragione, la prossima volta andrà bene.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *