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:
mais je la soupçonne d'être passablement coûteuse... surtout pour une petite chaîne!
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
ou la solution de suppression des autres caractères avec sed:
ou
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
Les spécialistes savent-ils quelle solution (parmi celles-ci ou d'autres, valables pour ksh) est la plus efficace?
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
Partager