Bonjour.

Petit problème de débutant!

J'ai une chaîne 'un_champ:un_autre_champ:encore_un' qui contient, sur une seule ligne, des champs séparés par le séparateur ':'.
Je voudrais calculer le nombre de champs de cette chaîne.

J'ai bien la solution extrêmement simple avec awk:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
typeset LISTE='un_champ:un_autre_champ:encore_un'
typeset -i nf=$(print "${LISTE}" | awk -F ":" '{print NF}')
print ${nf}
3
mais je la soupçonne d'être passablement coûteuse... surtout pour une petite chaîne!

ou la solution de suppression des autres caractères avec sed:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
typeset LISTE='un_champ:un_autre_champ:encore_un'
typeset lif=$(print "${LISTE}" | sed -e 's/[^:]//g')
typeset -i nf=$((${#lif} + 1))
print ${nf}
3
ou

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
typeset LISTE='un_champ:un_autre_champ:encore_un'
typeset -i nf=$(print "${LISTE}" | sed -e 's/[^:]//g' | wc -c) 
print ${nf}
3
Les spécialistes savent-ils quelle solution (parmi celles-ci ou d'autres, valables pour ksh) est la plus efficace?