Programmer en C-Shell

Fermé
Aurore - 16 mars 2005 à 15:21
 rore - 17 mars 2005 à 15:26
Bonjour a tous.
Je dois récupérer des données d'un fichier texte pour les mettre ds un BD MySQL
Je sais compter le nombre de ligne de mon document
(@ ligne = `cat $fichier_dex |wc -l`)
Maintenant je voudrais compter le nombre d'élément de chaque ligne sachant qu'ils sont séparé par des ";" (points virgule)

DANS L'ATTENTE D'UNE REPONSE TRèS RAPIDE MERCI A TOUS BIZ
A voir également:

4 réponses

tuton Messages postés 94 Date d'inscription vendredi 26 novembre 2004 Statut Membre Dernière intervention 12 octobre 2005 5
16 mars 2005 à 18:26
bon ca m'enerve je comprend pas pourquoi il m'affiche les truc 2 fois
0
tuton Messages postés 94 Date d'inscription vendredi 26 novembre 2004 Statut Membre Dernière intervention 12 octobre 2005 5
16 mars 2005 à 18:28
GROS PS : je sais pas ce qu'es le C-shell mais ton truc ca ressemble à la syntax du bash alors voila ce que j'aurais fait sous bash, je precise que je ne suis pas un expert de la programation, je dirais plutot même un debutant... Bon courage

au pif sans essayer... un truc du genre ca marche ou pas:

i="0"
p="1"
ligne="$LIGNE_A_TRAITER"

while [ "$i" == "0" ]
do
test=`echo $ligne | awk -F; '{print $p}'`
if [ "$test" != "" ]
then
counter = $(( $counter + 1 ))
else
i="1"
fi
done
echo "le nombre de parametre est: $counter"

voila j'espere que ca marchotera un peu.

sinon pour des precision,
man awk
man bash...
salut
0
Salut,

Je procederais comme suit:
awk 'BEGIN{ FS=";" } { print "Ligne "FNR": "NF" éléments."} END{ print "Nombre de ligne total: "NR }'


Une seule ligne, toutes les données voulues.
L'inconvenient majeur c'est que le nombre total de ligne ne peut arriver qu'a la fin puisque la variable NR contient le nombre d'enregistrement déjà lus.
Rien ne t'empeches de passer par un wc -l avant la commande awk, et de supprimer le bloc END, tout dépend de ce que tu souhaite avoir en sortie, dans quel ordre, et ce que tu souhaites en faire.
FS: Séparateur
FNR: Numero de l'enregistrement lu
NF: Nombre de champ de l'enregistrement courant
NR: Nombre d'enregistrement lus

Mais les autres solutions ne manquent pas
Si tes champs ne contiennent pas d'espace, tu peux transformer les ";" en espace (tr ';' ' ') puis compter les mots (wc -w), si tu as des espaces, il suffit de les transformer en autre chose au préalabe(#, -, _, etc.)

Bonne continuation.
0
tuton Messages postés 94 Date d'inscription vendredi 26 novembre 2004 Statut Membre Dernière intervention 12 octobre 2005 5
17 mars 2005 à 15:22
c'est clairement plu simple en effet...
Merci nfrirer ca peut toujours servir ce genre de commande...
0
marci de ta rep peti Tuton ca fé plaiz...Biz
0