Est-il possible de faire quelque chose comme ça en bash
avec cut
:
strLf="JJT9879YGTT" strZ=(2, 3, 5, 6, 9, 11) numZ=${#strZ[@]} for ((ctZ=0; ctZ<${numZ}; ctZ++)) do lenThis=${strZ[${ctZ}]} fetch=$(echo "${strLf}" | cut -c 1-${lenThis}) done
Par des boucles successives, je veux que ${fetch}
contienne "JJ" "JJT" "JJT98" "JJT987" "JJT9879YG" "JJT9879YGTT"
, etc., en fonction des index fournis par strZ
.
Ou est-ce que je dois faire autre chose?
Vous pouvez utiliser ${ssortingng:position:length}
pour obtenir les caractères de length
de $ssortingng
commençant en position
.
$ s="JJT9879YGTT" $ echo ${s:0:2} JJ $ echo ${s:0:3} JJT
Et aussi en utilisant des variables:
$ t=5 $ echo ${s:0:$t} JJT98
Donc, si vous mettez toutes ces valeurs dans un tableau, vous pouvez les parcourir en boucle et utiliser sa valeur comme un argument de length
indiquant ${ssortingng:0:length}
:
strLf="JJT9879YGTT" strZ=(2 3 5 6 9 11) for i in ${strZ[@]}; do echo "${strLf:0:$i}" done
Pour votre chaîne donnée, il me le retourne:
$ for i in ${strZ[@]}; do echo "${strLf:0:$i}"; done JJ JJT JJT98 JJT987 JJT9879YG JJT9879YGTT
words="JJT9879YGTT" strZ=(2 3 5 6 9 11) for i in "${strZ[@]}" do echo ${words:0:$i} done
Sortie:
JJ JJT JJT98 JJT987 JJT9879YG JJT9879YGTT
DEMO
Réalisé mon erreur – j’utilisais des virgules dans le tableau pour identifier les éléments.
Donc, au lieu de ce que j’utilisais:
strZ=(2, 3, 5, 6, 9, 11)
Je dois utiliser:
strZ=(2 3 5 6 9 11)
Cela fonctionne pour cut
aussi.