Programmer en C-Shell
Aurore
-
rore -
rore -
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
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:
- Programmer en C-Shell
- Classic shell - Télécharger - Personnalisation
- Programmer sms - Guide
- Programmer mail gmail - Guide
- Programmer en basic sous windows 10 - Télécharger - Édition & Programmation
- Mettre en veille un programme - Guide
4 réponses
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
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
Salut,
Je procederais comme suit:
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.
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.