Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1913 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Compter le nombre de caractère d'une ligne d'un fichier

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Compter le nombre de caractère d'une ligne d'un fichier

n°1316165
lapartdomb​re
Posté le 01-03-2006 à 14:07:03  profilanswer
 

Bonjour je cherche à savoir si chaque ligne d'un fichier respecte bien un nombre de caractère.
 
J'ai essayé avec awk mais je n'arrive pas à le faire fonctionner.  
 

Code :
  1. awk -F '{if(length($1)>5000) print NR}' $HOME/data_client.txt >$FIC_TRACE


 
Il me renvoit comme erreur :
 

Code :
  1. awk: record `BROCINDY            ...' too long


 
Est ce que quelqu'un connait un moyen de le faire

mood
Publicité
Posté le 01-03-2006 à 14:07:03  profilanswer
 

n°1316444
Sve@r
Posté le 01-03-2006 à 19:07:33  profilanswer
 

lapartdombre a écrit :

Bonjour je cherche à savoir si chaque ligne d'un fichier respecte bien un nombre de caractère.
 
J'ai essayé avec awk mais je n'arrive pas à le faire fonctionner.  
 

Code :
  1. awk -F '{if(length($1)>5000) print NR}' $HOME/data_client.txt >$FIC_TRACE


 
Il me renvoit comme erreur :
 

Code :
  1. awk: record `BROCINDY            ...' too long


 
Est ce que quelqu'un connait un moyen de le faire


 
Après "-F" il faut mettre un séparateur de champs si ce séparateur n'est pas espace ou tabulation => "awk -F: '{...}' /etc/passwd" par exemple. Si ton fichier est séparé par des espaces ou des tabulations (comme dans 98% des fichiers textes), tu ne mets pas "-F"
 
Sinon, la ligne entière est symbolisée par "$0" et non "$1" !!!
 
Enfin t'as une aide irremplaçable: le man => man awk !!!
 


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1316691
matafan
Posté le 02-03-2006 à 01:32:51  profilanswer
 

Dans beaucoup d'implementations, awk ne supporte que des lignes de longueur limitee. Donc verifier la taille des lignes avec awk, ce n'est pas forcement une bonne idee.

n°1317068
Sve@r
Posté le 02-03-2006 à 15:31:13  profilanswer
 

matafan a écrit :

Dans beaucoup d'implementations, awk ne supporte que des lignes de longueur limitee. Donc verifier la taille des lignes avec awk, ce n'est pas forcement une bonne idee.


 
Tiens ? Je savais pas. Boaf, on n'a qu'à faire ça en shell...
 

#!/bin/sh
 
# Stockage du fichier à vérifier dans buffer n° 3 (0, 1 et 2 étants déjà pris)
exec 3<$HOME/data_client.txt
 
# Lecture du buffer 3 ligne à ligne
while read ligne 0<&3
do
    # Si longueur de ligne plus grand que 5000 affichage ligne
    test `expr $ligne : '.*'` -gt 5000 && echo $ligne
done


 


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1317498
matafan
Posté le 03-03-2006 à 00:12:17  profilanswer
 

Tiens je viens de tester, et la limitation de awk a ete levee sous AIX 5.3. En 5.2 une ligne est limitee a 10239 caracteres.
 
Sinon en shell, ${#ligne} est la longueur de $ligne. Pas besoin de expr et de regexp.

n°1317514
Sve@r
Posté le 03-03-2006 à 01:00:09  profilanswer
 

matafan a écrit :

Sinon en shell bash, ${#ligne} est la longueur de $ligne. Pas besoin de expr et de regexp.


En Bourne Again ou en Korn, pas en Bourne. Si tu es sous Linux, ok. Mais si tu es sous AIX...
 
Le script que j'ai écrit (accessoirement sans "regexp" ) est compatible 100% Bourne Shell...


Message édité par Sve@r le 03-03-2006 à 01:02:54

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1317542
matafan
Posté le 03-03-2006 à 07:40:37  profilanswer
 

Le shell par defaut sous AIX est ksh. Je pense (en fait j'en suis sûr) que ${#} marche sur tous les shells POSIX. Et si '.*' n'est pas une regexp, tu appelles ça comment ?

Message cité 1 fois
Message édité par matafan le 03-03-2006 à 07:43:06
n°1318907
Sve@r
Posté le 05-03-2006 à 12:54:07  profilanswer
 

matafan a écrit :

Le shell par defaut sous AIX est ksh. Je pense (en fait j'en suis sûr) que ${#} marche sur tous les shells POSIX.


J'ai jamais vérifié. Mais ça ne fonctionne pas en pur Bourne Shell. Mais évidemment la compatibilité descendante n'est pas forcément une obligation pour le script...
 

matafan a écrit :

Et si '.*' n'est pas une regexp, tu appelles ça comment ?


Ben pour moi c'est un argument de "expr"...
 
Bon, allez. Pour te faire plaisir, pas de "regexp" (et toujours 100% compatible Bourne Shell)

#!/bin/sh
 
# Stockage du fichier à vérifier dans buffer n° 3 (0, 1 et 2 étants déjà pris)
exec 3<$HOME/data_client.txt
 
# Lecture du buffer 3 ligne à ligne
while read ligne 0<&3
do
    # Si longueur de ligne plus grand que 5000 affichage ligne
    test `echo $ligne |wc -c` -gt 5000 && echo $ligne
done


;)  :sol:  


Message édité par Sve@r le 05-03-2006 à 12:55:09

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  Compter le nombre de caractère d'une ligne d'un fichier

 

Sujets relatifs
Recherche dans un fichier et comparaison[J2ME] Reconstituer un fichier a partir d'un byte[ ]
Lecture du nombre de caracteres d'un floatEffacement d'un fichier qui a une certaine taille
un fichier batchHelp MySQL tri par nombre d'occurrences
ligne de commandes-lancement de deux exécutablesvlookup, menu deroulant sur diffrente ligne
test si colonne vide à partir de la 2eme ligne[Resolu]selection de ligne d'un tableau dynamique et formulaire
Plus de sujets relatifs à : Compter le nombre de caractère d'une ligne d'un fichier


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR