Rechercher : dans
Par :

Shell compter caractère de chaque ligne

Dernière réponse le 27 fév 2008 à 20:24:13 Jules, le 26 fév 2008 à 10:03:59 
 Signaler ce message aux modérateurs

Bonjour,

Je cherche une solution pour compter le nombre de caractères sur chaque ligne d'un fichier.

La solution wc me donne le nombre total de lignes et de caractères.

Ainsi la commande head -1 001_OUT_COM_VES_VESR_20080225211443864406.txt | wc -c va me donner le nb de caractère de la ligne 1 par exple.

J'ai tenté de m'orienter vers la solution
while read ligne ; do wc -c $ligne ; done < 001_OUT_COM_VES_VESR_20080225211443864406.txt

Mais, la commande interprete la variable $ligne comme un fichier. Est il possible de préciser que ce sont les caractères de la variable en sortie qu'il faut compter ?

Une autre solution serait de faire une boucle de type head -"x" fiicher | tail -"x-1" avec un renvoi vers un fichier temporaire dans lequel je compte le nb de caractères mais la solution me semble tortueuse ...

Est-ce que vous pouvez me suggérer une solution moins contraignante ?

Merci d'avance

Ps : j'ai hésité à mettre ce post dans programmation ...

Configuration: AIX 3 5

Meilleures réponses pour « Shell compter caractère de chaque ligne » dans :
La comptabilité en ligne Voir Effectuer ses comptes sur Internet La comptabilité en ligne est une alternative séduisante à l'achat de logiciels de comptabilité. En louant un accès à un logiciel de comptabilité sur Internet, une entreprise de petite taille peut réaliser de...
[Shell] Tester une variable numérique VoirTester une variable numérique    Préambule Dans un environnement "shell", les variables sont, par défaut, de type "chaîne de caractères". De ce fait il n'est pas possible de déclarer une variable de type "entier" (enfin, ceci n'est pas tout à...
Compter les mots dans un document (OpenOffice.org ou Word) VoirIl est parfois utile de pouvoir compter le nombre de mots ou de caractères dans un document. Les deux principales suites bureautiques permettent de le faire très simplement : Avec Word Avec OpenOffice.org Avec Word Ouvrez votre document...
Banques en ligne : les fonctionnalités professionnelles VoirGérer les comptes et effectuer toutes les opérations bancaires de votre entreprise directement en ligne, sans passer en agence, est aujourd’hui possible. Il y a les banques exclusivement en ligne, comme Monabanq, et les banques dites «...
Systèmes UNIX - Le shell VoirIntroduction au shell L'interpréteur de commandes est l'interface entre l'utilisateur et le système d'exploitation, d'où son nom anglais «shell», qui signifie «coquille». Le shell est ainsi chargé de faire l'intermédiaire entre le système...
Linux - L'éditeur Vi VoirIntroduction à Vi Vi est un des éditeurs de texte les plus populaires sous les systèmes de type Unix (avec Emacs et pico) malgré son ergonomie très limitée. Sous Linux il existe une version libre de Vi appelée Vim (Vi Improved). Vi (prononcez...

1

lami20j, le 26 fév 2008 à 10:12:40

Salut,

while read ligne;do echo $ligne| wc -c;done < fichier.txt

lami20j

Répondre à lami20j

6

Jules, le 26 fév 2008 à 10:51:51

Merci lami20j (si c'est bien ton vrai nom :-) )
Cette me retourne des résultats incorrects :

head -1 fichier.txt
007121049191 xx xxxxxxxxxx xxxxxxx etc .......


$ head -1 fichier.txt | wc -c
262
(262 caractères sur la 1ere ligne)

Ta commande me retourne :
19
74
73
83
73


Ma solution tortueuse :

NB_LIGNES=`wc -l $1|awk -F \ '{print $1}'`
#echo "Le fichier $1 contient $NB_LIGNES lignes"
NUM_LIGNE=1
until [ "$NUM_LIGNE" = "$NB_LIGNES" ]
do
NB_CARACTERES=`head -$NUM_LIGNE $1 |tail -1|wc -c`
echo "La ligne $NUM_LIGNE contient $NB_CARACTERES caracteres"
NUM_LIGNE=`expr $NUM_LIGNE + 1`
done

echo "La ligne $NUM_LIGNE contient $NB_CARACTERES caracteres"


verif_longueur.ksh fichier.txt :
La ligne 1 contient 262 caracteres
La ligne 2 contient 262 caracteres
La ligne 3 contient 262 caracteres
La ligne 4 contient 262 caracteres
La ligne 5 contient 262 caracteres


Je vais m'orienter vers le awk peut-être

Répondre à Jules

17

 mehmet110, le 26 fév 2008 à 11:55:41

merci lami20j pour dir salut

Répondre à mehmet110

2

EminoMeneko, le 26 fév 2008 à 10:14:42
  • +2

Man awk ça aide. :)

utiliser awk qui parcour un fichier ligne par ligne et le traite avec la méthode length

$0 désigne une ligne :)

Répondre à EminoMeneko

8

Jules, le 26 fév 2008 à 11:00:17

Merci ! j'avais po pensé au awk ... j'espère que vous aurez apprécié ma solution tortueuse lol

Répondre à Jules

3

lami20j, le 26 fév 2008 à 10:17:26

Salut,

pas besoin de awk pour faire ça
lami20j

Répondre à lami20j

4

EminoMeneko, le 26 fév 2008 à 10:35:58

Oui mais ça reste une solution. En tout cas la tienne à l'air très bien. :)

Répondre à EminoMeneko

5

jipicy, le 26 fév 2008 à 10:50:38
  • +2

Salut lami20j,

pas besoin de awk pour faire ça
Si si awk est très bien pour ça :

awk '{ print length($0) }' fichier
;-))

Z'@+...che.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

7

Jules, le 26 fév 2008 à 10:54:46

Ooooooooooooooooooooh quelle est belle cette solution !

Merci !!!!!

Par contre, ça ne compte pas le caractère de retour de fin de ligne ... mais ça n'a pas d'importance pour moi.

Encore merci.

Répondre à Jules

9

EminoMeneko, le 26 fév 2008 à 11:13:08

T'as vu ça j'suis pas étudiant en info système réseau pour rien lol. Et niveau shell script awk est un petit peu au centre de tout avec sed mais bien sûr je préfère awk de très loin héhé :) enfin bon j'ai pas laché la soluce comme ça non plus désolé. :/
Mais j'ai un peu mis sur la voie.

Le cours le plus important à retenir RTFM. En gros sous nux ça se résume souvent à man. :)

Répondre à EminoMeneko

10

lami20j, le 26 fév 2008 à 11:13:25

Je n'ai pas dit qu'on ne peux pas utiliser awk ;-)

lami20j

Répondre à lami20j

11

jipicy, le 26 fév 2008 à 11:16:50

C'est vrai, t'as pas dit ça, mais t'en voulais pas quand même ;-DD

Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy

12

EminoMeneko, le 26 fév 2008 à 11:31:21

OWNED ?
En tout cas je pense que le problème est résolu non ? :)

Répondre à EminoMeneko

15

lami20j, le 26 fév 2008 à 11:34:05

Oui ;-)
lami20j

Répondre à lami20j

14

lami20j, le 26 fév 2008 à 11:32:46

;-))
lami20j

Répondre à lami20j

13

lami20j, le 26 fév 2008 à 11:32:03
  • +1

En fait ce qui est important c'est qu'il y a plusieurs solutions
et vu ma paresse, bien sûr que je preferereais celle avec awk, puisqu'elle est trop courte

pour s'amuser voici encore des solutions, cette fois avec perl ;-)

perl -ne 'print length,"\n"' fichier.txt
perl -ne 'print scalar(map {/./sg} $_),"\n"' fichier.txt
perl -ne '$n=1;s/./++$n/eg;print $n,"\n"' fichier.txt

lami20j

Répondre à lami20j

16

jipicy, le 26 fév 2008 à 11:35:47

Tout à fait l'ami ;-))

Z'@+...che.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé.

Répondre à jipicy