Compter le nombre de caractères
Résolu
ani
-
flavgnon -
flavgnon -
Bonjour,je voudrais avoir une commande qui me permette de compter le nombre de caractères dans une ligne.Et l'afficher. Je précise que je travaille sous vi.
A voir également:
- Compter le nombre de caractères
- Ascii nombre de caractères - Guide
- Caractères spéciaux - Guide
- Nombre de jours entre deux dates excel - Guide
- Nombre de caractères word - Guide
- Caractères spéciaux mac - Guide
12 réponses
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
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.
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
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
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 questioncat 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.
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
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$;-))
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
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 ;-(
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
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 :
Voilà la bonne syntaxe :
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)
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
############
####
#!/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
./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 :
et non pas :
Dont à la place de :
remplace par :
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
>>
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
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
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.
./essai: line 3: ,/: Aucun fichier ou répertoire de ce type
Merci
J'ai pas rêvé ?
Donc la commande s'exécute depuis ton fichier ouvert dans vi ;-))
Sinon, avec "sed" : avec "ed" : ;-))