Compter le nombre de caractères
Résoluflavgnon -
Configuration: Windows XP Internet Explorer 7.0
12 réponses
Il s'agit de concevoir une commande capable de compter les caractères d'une ligne et de l'afficher, dans un contexte vi sous Windows XP et Internet Explorer 7. Des propositions privilégient l'usage d'outils comme awk et sed pour traiter les lignes et insérer des séparateurs, notamment awk -F',' '{SUM += $2} END {print SUM}' pour additionner la deuxième colonne. D'autres extraits démontrent comment générer le fichier fich1 en préservant son contenu existant et en plaçant le résultat sur la première ligne, tout en évitant d'écraser les données antérieures. En pratique, les solutions emploient souvent des combinaisons: nettoyage des lignes, suppression des blancs, puis concaténation du résultat, ce qui peut affecter le format final du fichier fich1.
-
Salut,
http://vim.dindinx.net/traduit/html/tips.txt.php#count-items
;-))-
Salut.
Merci pour ton aide. Mais au fait je voudrais une commande qui me permettrait ayant une chaine de chiffres, compter les 8 premiers chiffres et mettre une virgule entre le 8e et le 9e chiffre.
Merci bcp.- Merci. C'est encore moi mais je voudrais savoir (excuse moi si mes questions sont un peu évidentes à ton gout) mais je ne vois nullement dans ton script ou il est spécifié le fichier sur lequel on dois intervenir. Aussi lorsque je l'excécute il s'affiche: ./essai: line 3: :%s/.{8}/: Aucun fichier ou répertoire de ce type
./essai: line 3: ,/: Aucun fichier ou répertoire de ce type
Merci
-
-
dans vi taper
8|
pour se positionner à la huitième colonne -
Bonjour,
Merci pour ton aide mais je voudrais un programme pour automatiser cette tache car j'aurais plusieurs fichiers ayant eux aussi plusieurs lignes et pour toutes ces lignes dans tous ces fichiers je voudrais insérer une virgule entre le 8e et le 9e chiffre.
Merci d'avance-
S'il n'y a que des lignes avec des chiffres dans tes fichiers, la solution données au post #5 avec "sed" ou "ed" fera très bien l'affaire...
A part que si tu choisis l'option "-i" ou "-i.bak" de sed et de traiter tous les fichiers en bloc (fichier*), il te faudra rajouter l'option "-s" pour traiter chaque fichier individuellement et non comme un seul et même fichier.
-
-
-
Excuse moi mais je ne te comprend pas bien surement que je me suis mal expliquée.
Tout simplement je voudrais passer de:
125462389543594555
989545565689421536
A:
1254623594555
9895455421536
A partir d'un bout de programme toujours sur le même fichier qu'auparavant
Si tu vois bien les chiffres de la 7e à la 12e position ont été effacés -
-
-
Donne un exemple, histoire qu'on se comprenne bien ;-))
-
Bon supposons que nous ayons:
14 nom_fichier
et que nous voulions
14
Au fat j'ai taper la commande "w -l nom_fichier" pour avoir le nombre de lignes du fichier nom_fichier mais moi, seul le nombre m'intéresse mais cette commande affiche aussi le nom du fichier. Je voudrais donc soit effacer le nom du fichier automatiquement ou avoir une commande qui n'affiche uniquement que le nombre de lignes de cet fichier.Merci
-
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
cat nom_fichier | wc -l
-
-
Salut. J'ai un petit pépin.
J'ai utilisé la commande que tu m'as indiquée et comme je voulais que le résultat (le nombre de lignes du fichier final) soit dans un fichier (fichier fich1) et qu'il y ai une virgule à la fin de la ligne ( après le nombre de lignes de fich1) j'ai fait ceci:
cat final | wc -l > fich1 (Il compte le nombre de lignes de final et met cet nombre dans fich1)
sed 's/$/,/g' fich1 >> fich1 (Il met un virgule à la fin de la ligne du fichier fich1)
Cependant j'ai comme resultat dans le fichier fich1 ceci:
nombre_de_ligne
nombre_de_ligne,
Or moi je voulais:
nombre_de_ligne,
Ce qui m'a conduit à écrire comme code:
cat final | wc -l > fich1
sed 's/$/,/g' fich1 > fich1
J'ai enlevé une redirection mais lorsque j'ouvre mon fichier fich1 il n'y a rien dedans.
Comment faire pour avoir dans mon fichier fich1
nombre_de_ligne,
Merci.
-
-
Essaye plutôt :
cat final | wc -l | sed 's/$/,/' > fich1
;-))-
Merci ça marche à merveille.
Si tu te rappelle de nos premières discussions j'avais voulu mettre une virgule entre le 8e et le 9e chiffre et mettre ,9,, à la fin de chaque ligne et ce pour toutes les lignes du fichier. Maintenant ce que je veux c'est de faire la somme de ces nombres qui sont entre la virgule et le signe ,99, et afficher le résultat à la suite de la somme des lignes du fichier final dans le fichier fich1.
NB: Tout ces nombres sont dans le fichier final dont un exemplaire est le suivantt:
01650426,4856622,9,,
06630946,456484867466,9,,
05426459,96512,9,,
et il faut afficher la somme des éléments de la 2e colonne dans le fichier fich1 à la première ligne sans écraser ce que le fichier fich1 contenait.
Merci
-
-
jp@MDK:~/tmpfs ssh$ cat fich blabla blabla ... ... blabla jp@MDK:~/tmpfs ssh$ cat final 01650426,4856622,9,, 06630946,456484867466,9,, 05426459,96512,9,, jp@MDK:~/tmpfs ssh$ SOMME=$(awk -F',' '{SUM += $2} END { print SUM }' final) jp@MDK:~/tmpfs ssh$ echo $SOMME 4,5649e+11 jp@MDK:~/tmpfs ssh$ sed -i '1i\'"$SOMME"'' fich jp@MDK:~/tmpfs ssh$ cat fich 4,5649e+11 blabla blabla ... ... blabla jp@MDK:~/tmpfs ssh$;-))
-
Bonjour,
Merci pour ton aide j'ai essayé le bout de programme que tu m'avais donnée mais lorsque j' excécute le progrmme on me dis:
awk: command not found
J'ai aussi essayé avec gawk mais c'est pareil.
Je ne sais pas quel est le problème.
Merci- Salut,
Excuse moi pour le temps d'attente mais comme tu me l'avais demandé voici ce que renvoi les commandes:
$ whereis awk gawk
awk: /bin/awk /usr/bin/awk /usr/libexec/awk /usr/share/awk /usr/share/man/man1/a
gawk: /bin/gawk /usr/bin/gawk /usr/share/man/man1/gawk.1.gz
$ which awk gawk
/bin/awk
/bin/gawk
$ type awk gawk
awk is /bin/awk
gawk is /bin/gawk
Merci
-
-
Donc "awk" (et gawk) sont bien installés sur ton système, bizarre que tu aies cette erreur "awk: command not found " !? ;-\
Tu peux afficher la commande (ou le script, enfin tout ce qui pourrait nous mettre sur la voie) que tu exécutes et la sortie générée (messages d'erreurs compris), parce que là à vue de nez, j'ai du mal ;-(
-
Salut,
Voici mon programme en entier:
################## PROGRAMME D ESSAI###############
#!/bin/sh
sed '/^ *$/d' ani > ani1
sed 's/ //g' ani1 > ani2
sed -i.bak 's/.\{8\}/&,/' ani2
sed 's/$/,9,,/g' ani2 > ani3
mv ani3 final
rm ani*
cat final | wc -l | sed 's/$/,/' > fich1
somme=&{awk -F',' '{SUM += &2} END {print SUM}' final}
echo &SOMME
sed -i '1i\'"&SOMME"'' fich1
cat fich1
et lorsque je l'excécute voici ce qui s'affiche:
[fanicette@ppsvasweb ~]$ ./prjt_num_mont.sh
./prjt_num_mont.sh: line 27: {awk: command not found
./prjt_num_mont.sh: line 29: SOMME: command not found
&SOMME
3,
Merci -
-
-
Les erreur sont en gras ci-dessous :
somme=&{awk -F',' '{SUM += &2} END {print SUM}' final} echo &SOMME sed -i '1i\'"&SOMME"'' fich1
Voilà la bonne syntaxe :somme=$(awk -F',' '{SUM += &2} END {print SUM}' final) echo $somme sed -i '1i\'"$somme"'' fich1;-))
-
si je peux me permettre:
somme=$(awk -F',' '{SUM += $2} END {print SUM}' final)-
Oups ;-((
Thank you very mucho ;-))
PS. J'avoue ne même pas avoir regardé la syntaxe de la commande avec awk ;-((
- Vioci la sytaxe en entier
############
####
#!/bin/sh
sed '/^ *$/d' ani > ani1
#Enleve les lignes vides.
sed 's/ //g' ani1 > ani2
#Enleve les espaces entre les caracteres.
sed -i.bak 's/.\{8\}/&,/' ani2
#Met une virgule entre le 8e et le 9e chiffre.
sed 's/$/,9,,/g' ani2 > ani3
#Met les ,9,, a la fin de chaque ligne.
mv ani3 final
rm ani*
#Supprime tous les fichiers commencant par ani.
cat final | wc -l | sed 's/$/,/' > fich1
#Affiche le nombre de numeros qui doivent subir le transfert de credit.
#Somme des montants a transfere
somme=${awk -F',' '{SUM += $2} END {print SUM}' final}
echo $somme
sed i '1i
\'"$somme"'' fich1d
cat fich1
Merci
-
-
Corrige cette partie comme ça :
#Somme des montants a transfere somme=$(awk -F',' '{SUM += $2} END {print SUM}' final) echo $somme sed -i '1i\ '"$somme"' ' fich1 cat fich1
-
Salut j'ai bien fait ce que tu m'as di mais bon ça ne marche toujours pas. Voici ce qui s'affiche:
./prjt_num_mont.sh: line 36: ${awk -F',' '{SUM += $2} END {print SUM}' final}: bad substitution
2,
Merci-
Non tu n'as pas fait ce que je t'ai dit (ou écrit du moins) !!!
Entre le signe dollar ($) et la commande awk c'est une parenthèse ouvrante qu'il faut et non une accolade !
Idem à la fin, remplace l'accolade fermante par une parenthèse fermante !
La syntaxe d'une substitution de commande c'est :$(commande)
et non pas :${commande}
Dont à la place de :${awk -F',' '{SUM += $2} END {print SUM}' final}
remplace par :$(awk -F',' '{SUM += $2} END {print SUM}' final) -
Salut j'espère que je ne t'emerde pas trop. Je voudrais savoir comment faire car j'aimerais mettre la somme de la 2e ligne à la suite du fichier présent (sur la meme ligne que les données présentent) et non pas au début du fichier. J'ai essayé avec
>>
et aussi avec
tr 6d 'n' < fiich1 > fich2
mais je n'ai pas eu de resultat
Merci -
N'ayant plus en tête les épisodes précédents concernant ton scripts et la flemme de tout me retaper, voilà un exemple que tu pourras adapter à ton cas sans trop de difficultés je pense :
[tmpfs]$ cat fichier.txt ligne1 ligne2 ligne3 ligne4 ligne5 [tmpfs]$ somme="222" [tmpfs]$ sed -i "2 s/.*/& ${somme}/" fichier.txt [tmpfs]$ cat fichier.txt ligne1 ligne2 222 ligne3 ligne4 ligne5 [tmpfs]$;-))
-
Salut.
Excuse moi encore mais je crois que je me suis mal exprimée.
Tu m'as recement donné un script avec la commande awk pour pouvoir faire la somme de tous les nombres la 2e COLONNE d'un fichier nommé fich et le résultat s'affichait au début d'un fichier appelé fich1 et ce fichier fich1 contenait au paravant quelque chose.
Ce que je veux maintenant c'est d'afficher la somme non pas au début du fichier mais à la suite du contenu du fichier fich1.
Merci -
-