[bash] Contrôler la longueur des lignes dans un fichier.

Contrôler la longueur des lignes dans un fichier. [bash] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 14-10-2009 à 20:55:47    

Bonjour,
 
J'ai fait un petit script pour traiter mes fichiers code sources.  Et dans ces scripts je vérifie qu'aucune ligne ne dépasse une longueur fixée.
Pour ce faire j'utilise ce bout de script (totalement personnel) qui contrôle le fichier ligne par ligne et en cas de dépassement affiche le numéro de la ligne en cause.
 

Code :
  1. $COLONNE_MAX=90
  2. ETAT="0"
  3. while read ligne
  4. do
  5.    NUM_LIGNE=$((NUM_LIGNE + 1));
  6.    if [ ${#ligne} -gt $COLONNE_MAX ]; then
  7.       echo "ATTENTION : La ligne $NUM_LIGNE est trop longue"
  8.       ETAT="1"
  9.    fi
  10. done < $1
  11. if [ $ETAT -ne "0" ]; then
  12.    echo "--> FAILED"
  13. else
  14.    echo "--> OK"
  15. fi


 
($1 est le fichier que je passe en argumant au script.)
 
Je pense que cela n'est pas optimisé (ni peut etre trés correct) surtout quand le fichier en question fait 2000-3000 lignes. Existe-il un moyen plus rapide de faire cette opération?
 
Petite question subsidiaire, j'ai dans certains script que le nom des variables étaient définis  avec un '_' devant (ex: _var1 et donc $_var1, etc.). Mais je ne comprends pas pourquoi.
 
Merci pour vos réponses.
 
 


---------------
Celui qui sauve une vie, sauve l'humanité (Le Talmud) - Personne n'a plus grand amour que celui de donner sa vie pour ses amis (Jean XV, 13)
Reply

Marsh Posté le 14-10-2009 à 20:55:47   

Reply

Marsh Posté le 14-10-2009 à 21:08:11    

man indent


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 14-10-2009 à 21:17:39    

awk '{ if (length($0) > 40) { print "ligne N°"NR" fuckée" } }' /path/to/file

Reply

Marsh Posté le 14-10-2009 à 21:20:56    

Est ce que l utilisation de awk prendra en compte le caractère de fin de ligne ?
 
@Black_lord : d après le man de indent il fonctionne pour les fichiers C or ce n'est pas mon cas.


Message édité par le fou le 14-10-2009 à 21:27:40

---------------
Celui qui sauve une vie, sauve l'humanité (Le Talmud) - Personne n'a plus grand amour que celui de donner sa vie pour ses amis (Jean XV, 13)
Reply

Marsh Posté le 14-10-2009 à 21:43:36    

il fonctionne pour ce que tu veux :spamafote:


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 14-10-2009 à 22:00:35    

Je viens d'essayer la commande avec awk.
Ce qui est pas mal c'est qu'il a pas l'air de me compter le retour chariot.

 
black_lord a écrit :

il fonctionne pour ce que tu veux :spamafote:


Ok,  c'est bon a savoir.


Message édité par le fou le 14-10-2009 à 22:01:05

---------------
Celui qui sauve une vie, sauve l'humanité (Le Talmud) - Personne n'a plus grand amour que celui de donner sa vie pour ses amis (Jean XV, 13)
Reply

Marsh Posté le 14-10-2009 à 22:31:31    

En passant, toujours dans ce script j'utilise sed pour effacer les espaces inutiles en fin de ligne. Existe il un autre (et meilleur moyen) pour faire cela? ( j' ai pas regarde encore avec indent)
 
Et pour cette histoire de noms de variables avec des underscore vous avez une idée?


---------------
Celui qui sauve une vie, sauve l'humanité (Le Talmud) - Personne n'a plus grand amour que celui de donner sa vie pour ses amis (Jean XV, 13)
Reply

Marsh Posté le 15-10-2009 à 08:09:51    

typiquement on écrit _var pour une variable interne ("private" en OO), qui n'a pas de sens à l'extérieur de la portée où elle est déclarée et utilisée

Reply

Marsh Posté le 15-10-2009 à 09:14:52    

Bon j'ai encore une interrogation.

 

Dans mon script j'ai :
COLONNE_MAX=90
awk '{if(length($0) > $COLONNE_MAX) {print "+> ligne "NR" est trop longue"}}' $1

 

($1 est le fichier passe a mon script)
Seulement, quand je lance mon script, il m'indique que toutes les lignes dépasse 90 caractères. En fait, il ne doit pas prendre en compte la valeur de la variable ce qui est un peu gênant en fin de compte.

 

Awk ne fait pas de subsitution?

 

Edit : c'est bon j'ai trouve il suffit d'entourer la variable par ' '.


Message édité par le fou le 15-10-2009 à 09:50:03

---------------
Celui qui sauve une vie, sauve l'humanité (Le Talmud) - Personne n'a plus grand amour que celui de donner sa vie pour ses amis (Jean XV, 13)
Reply

Sujets relatifs:

Leave a Replay

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