Compter le nombre de caractères

Résolu/Fermé
ani - 12 sept. 2008 à 18:52
 flavgnon - 20 oct. 2008 à 20:24
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.

12 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
12 sept. 2008 à 20:08
Salut,

http://vim.dindinx.net/traduit/html/tips.txt.php#count-items

;-))
0
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.
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895 > ani
22 sept. 2008 à 14:40
:%s/.\{8\}/&,/
;-))
0
flavagnon Messages postés 5 Date d'inscription lundi 22 septembre 2008 Statut Membre Dernière intervention 23 septembre 2008 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
22 sept. 2008 à 17:43
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
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895 > flavagnon Messages postés 5 Date d'inscription lundi 22 septembre 2008 Statut Membre Dernière intervention 23 septembre 2008
22 sept. 2008 à 17:53
C'est bien toi qui a dit : Je précise que je travaille sous vi
J'ai pas rêvé ?

Donc la commande s'exécute depuis ton fichier ouvert dans vi ;-))

Sinon, avec "sed" :
sed -i.bak 's/.\{8\}/&,/' fichier
avec "ed" :
ed -s fichier <<< $',s/.\{8\}/&,/g\nw'
;-))
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
23 sept. 2008 à 09:27
dans vi taper
8|
pour se positionner à la huitième colonne
0
flavagnon Messages postés 5 Date d'inscription lundi 22 septembre 2008 Statut Membre Dernière intervention 23 septembre 2008
23 sept. 2008 à 11:33
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
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
23 sept. 2008 à 11:54
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.
0
flavagnon Messages postés 5 Date d'inscription lundi 22 septembre 2008 Statut Membre Dernière intervention 23 septembre 2008 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
23 sept. 2008 à 18:39
Merci infiniment c'est exactement ce que je cherchais.
Maintenant ce que je voudrais bien, c'est de supprimer les chiffres de la 9e position à la 25e position de chaque ligne de ce fichier. Merci beaucuop.
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895 > flavagnon Messages postés 5 Date d'inscription lundi 22 septembre 2008 Statut Membre Dernière intervention 23 septembre 2008
23 sept. 2008 à 18:48
Un exemple avant => après peut être ?

Ou un truc du genre ferait l'affaire :
[tmpfs]$ echo $var
12345678AZERTYUIOPQSDFGH23456789

[tmpfs]$ echo $var | sed 's/\(.\{8\}\)\(.\{16\}\)\(.*\)/\1,\3/'
12345678,23456789

[tmpfs]$
;-))
0
flavagnon Messages postés 5 Date d'inscription lundi 22 septembre 2008 Statut Membre Dernière intervention 23 septembre 2008 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
23 sept. 2008 à 19:06
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
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895 > flavagnon Messages postés 5 Date d'inscription lundi 22 septembre 2008 Statut Membre Dernière intervention 23 septembre 2008
23 sept. 2008 à 19:12
[tmpfs]$ cat new_fich
125462389543594555
989545565689421536

[tmpfs]$ sed 's/\(.\{7\}\).\{5\}\(.*\)/\1\2/' new_fich
1254623594555
9895455421536

[tmpfs]$ 
C'est mieux ? ;-))
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
26 sept. 2008 à 19:03
Donne un exemple, histoire qu'on se comprenne bien ;-))
0
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
26 sept. 2008 à 19:19
cat nom_fichier | wc -l
0
Merci. A+
0
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.
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
29 sept. 2008 à 12:32
Essaye plutôt :
cat final | wc -l | sed 's/$/,/' > fich1
;-))
0
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
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
29 sept. 2008 à 13:18
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$
;-))
0
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
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895 > flavagnon
1 oct. 2008 à 15:39
Que te renvoie les commandes suivantes :
whereis awk gawk
which awk gawk
type awk gawk
?
0
flavagnon > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
3 oct. 2008 à 12:22
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
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
3 oct. 2008 à 13:11
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 ;-(
0
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
0
Je precise qu'il devait s'afficher dans l'exemple que je viens de faire:
3,125896
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
3 oct. 2008 à 14:23
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 
;-))
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
3 oct. 2008 à 14:29
si je peux me permettre:
somme=$(awk -F',' '{SUM += $2} END {print SUM}' final)
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
3 oct. 2008 à 14:31
Oups ;-((

Thank you very mucho ;-))

PS. J'avoue ne même pas avoir regardé la syntaxe de la commande avec awk ;-((
0
flavagnon > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
16 oct. 2008 à 11:22
Salut

J'ai apporté les modifications mais voici ce qui apparait:


./prjt_num_mont.sh: line 36: ${awk -F',' '{SUM += $2} END {print SUM}' final}: bad substitution

sed: -e expression n°1, caractère 1: \ attendu après `a', `c' ou `i'
2,


Merci de m'aider.
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895 > flavagnon
16 oct. 2008 à 11:29
Affiche ta syntaxe en entier s'il te plaît, merci.

Déjà pour le "sed", mets un espace après le \ et avant '
ou fais carrément un retour à la ligne après le \
0
flavagnon > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
16 oct. 2008 à 19:14
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
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
16 oct. 2008 à 19:22
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


0
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
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
17 oct. 2008 à 16:56
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)
0
flavagnon > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
17 oct. 2008 à 19:30
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
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895 > flavagnon
17 oct. 2008 à 20:08
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]$
;-))
0
flavgnon > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
20 oct. 2008 à 11:18
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
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895 > flavgnon
20 oct. 2008 à 11:56
echo "$somme" >> fich1
0