Compter le nombre de caractères

Résolu
ani -  
 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:

12 réponses

jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Salut,

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

;-))
0
ani
 
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   Statut Modérateur Dernière intervention   4 896 > ani
 
:%s/.\{8\}/&,/
;-))
0
flavagnon Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
 
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   Statut Modérateur Dernière intervention   4 896 > flavagnon Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
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 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
dans vi taper
8|
pour se positionner à la huitième colonne
0
flavagnon Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Modérateur Dernière intervention   4 896
 
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   Statut Membre Dernière intervention   > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
 
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   Statut Modérateur Dernière intervention   4 896 > flavagnon Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
 
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   Statut Modérateur Dernière intervention   4 896 > flavagnon Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
[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   Statut Modérateur Dernière intervention   4 896
 
Donne un exemple, histoire qu'on se comprenne bien ;-))
0
flavagnon
 
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   Statut Modérateur Dernière intervention   4 896
 
cat nom_fichier | wc -l
0
flavagnon
 
Merci. A+
0
flavagnon
 
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   Statut Modérateur Dernière intervention   4 896
 
Essaye plutôt :
cat final | wc -l | sed 's/$/,/' > fich1
;-))
0
flavagnon
 
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   Statut Modérateur Dernière intervention   4 896
 
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
flavagnon
 
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   Statut Modérateur Dernière intervention   4 896 > flavagnon
 
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   Statut Modérateur Dernière intervention  
 
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   Statut Modérateur Dernière intervention   4 896
 
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
flavagnon
 
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
flavagnon
 
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   Statut Modérateur Dernière intervention   4 896
 
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 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
si je peux me permettre:
somme=$(awk -F',' '{SUM += $2} END {print SUM}' final)
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
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   Statut Modérateur Dernière intervention  
 
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   Statut Modérateur Dernière intervention   4 896 > flavagnon
 
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   Statut Modérateur Dernière intervention  
 
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   Statut Modérateur Dernière intervention   4 896
 
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
flavagnon
 
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   Statut Modérateur Dernière intervention   4 896
 
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   Statut Modérateur Dernière intervention  
 
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   Statut Modérateur Dernière intervention   4 896 > flavagnon
 
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   Statut Modérateur Dernière intervention  
 
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   Statut Modérateur Dernière intervention   4 896 > flavgnon
 
echo "$somme" >> fich1
0