Shell compter caractère de chaque ligne
Résolu/Fermé
A voir également:
- Shell compter caractère de chaque ligne
- Caractère ascii - Guide
- Caractere speciaux - Guide
- Caractère spéciaux - Guide
- Site de vente en ligne particulier - Guide
- Caractère spéciaux mac clavier - Guide
4 réponses
EminoMeneko
Messages postés
2434
Date d'inscription
jeudi 24 janvier 2008
Statut
Membre
Dernière intervention
23 mai 2018
318
26 févr. 2008 à 10:14
26 févr. 2008 à 10:14
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 :)
utiliser awk qui parcour un fichier ligne par ligne et le traite avec la méthode length
$0 désigne une ligne :)
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
26 févr. 2008 à 11:32
26 févr. 2008 à 11:32
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 ;-)
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
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 894
26 févr. 2008 à 11:35
26 févr. 2008 à 11:35
Tout à fait l'ami ;-))
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
26 févr. 2008 à 10:12
26 févr. 2008 à 10:12
Salut,
while read ligne;do echo $ligne| wc -c;done < fichier.txt
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
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
Cette solution est intéressante car elle ne dépend pas de programme externe qui ne sont as forcement présent (même si perl ou awk sont presque toujours installés).
Mais il y a deux erreurs de programmation : la ligne peut contenir des espaces consécutifs, pour les préserver il faut protéger $ligne avec des quotes. La commande echo rajoute un retour chariot, donc ça fait + 1 sur chaque ligne...
echo $ligne| wc -c
Doit devenir: echo -n "$ligne" | wc -c
Malheureusement l'option -n n'est pas portable sur tous les shell. On peut s'y prendre encore autrement en faisant un "moins 1"... mais c'est ch... embêtant. Surtout que faire un "moins 1" portable est assez verbeux aussi.
Mais il y a deux erreurs de programmation : la ligne peut contenir des espaces consécutifs, pour les préserver il faut protéger $ligne avec des quotes. La commande echo rajoute un retour chariot, donc ça fait + 1 sur chaque ligne...
echo $ligne| wc -c
Doit devenir: echo -n "$ligne" | wc -c
Malheureusement l'option -n n'est pas portable sur tous les shell. On peut s'y prendre encore autrement en faisant un "moins 1"... mais c'est ch... embêtant. Surtout que faire un "moins 1" portable est assez verbeux aussi.
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
26 févr. 2008 à 10:17
26 févr. 2008 à 10:17
Salut,
pas besoin de awk pour faire ça
pas besoin de awk pour faire ça
EminoMeneko
Messages postés
2434
Date d'inscription
jeudi 24 janvier 2008
Statut
Membre
Dernière intervention
23 mai 2018
318
26 févr. 2008 à 10:35
26 févr. 2008 à 10:35
Oui mais ça reste une solution. En tout cas la tienne à l'air très bien. :)
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 894
26 févr. 2008 à 10:50
26 févr. 2008 à 10:50
Salut lami20j,
pas besoin de awk pour faire ça
Si si awk est très bien pour ça :
pas besoin de awk pour faire ça
Si si awk est très bien pour ça :
awk '{ print length($0) }' fichier;-))
Jules
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
26 févr. 2008 à 10:54
26 févr. 2008 à 10:54
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.
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.
EminoMeneko
Messages postés
2434
Date d'inscription
jeudi 24 janvier 2008
Statut
Membre
Dernière intervention
23 mai 2018
318
>
Jules
26 févr. 2008 à 11:13
26 févr. 2008 à 11:13
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. :)
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. :)
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
26 févr. 2008 à 11:13
26 févr. 2008 à 11:13
je n'ai pas dit qu'on ne peux pas utiliser awk ;-)
26 févr. 2008 à 11:00