awk split paramètre par char

le fichier est:

BASH.NIR SH.ABI 

Je veux le script awk à afficher:

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

Je ne sais pas comment diviser un paramètre par caractère. Lidée est:

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

Réponse

Vous pouvez utiliser les fonctions de chaîne dans 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 fonction index renvoie la position du caractère à trouver (dans ce cas un point). Et strstr renverra une sous-chaîne. Nous utilisons p+1 et p-1 pour ne pas inclure le point.

Pour plus dinformations, consultez la section « Fonctions de chaîne » de la page de manuel awk.

Réponse

Vous pouvez simplement utiliser . comme séparateur de champ:

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

Commentaires

  • le fichier texte peut Jai aussi des espaces
  • @nir Veuillez coller un échantillon de votre entrée exacte dans votre question, je ne peux ' deviner à quoi cela ressemble comme à moins que vous ne le représentiez correctement.
  • @nir – il ' est toujours préférable dinclure des exemples de données réelles. Les données artificielles ne font généralement que gaspiller le temps de réponse ' car elles conduisent généralement à de mauvaises solutions.
  • vous avez raison, la forme sera remplie la prochaine fois.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *