Calculer efficacement le nombre de champs d'une string
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:
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:
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:
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?