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

Compter le nombre de caractère d'une ligne d'un fichier - Shell/Batch - Programmation

Marsh Posté le 01-03-2006 à 14:07:03    

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

Reply

Marsh Posté le 01-03-2006 à 14:07:03   

Reply

Marsh Posté le 01-03-2006 à 19:07:33    

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.
Reply

Marsh Posté le 02-03-2006 à 01:32:51    

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.

Reply

Marsh Posté le 02-03-2006 à 15:31:13    

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.
Reply

Marsh Posté le 03-03-2006 à 00:12:17    

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.

Reply

Marsh Posté le 03-03-2006 à 01:00:09    

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.
Reply

Marsh Posté le 03-03-2006 à 07:40:37    

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
Reply

Marsh Posté le 05-03-2006 à 12:54:07    

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.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed