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.