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

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1171897
le fou
Forza Massallia
Posté le 14-10-2009 à 20:55:47  profilanswer
 

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)
mood
Publicité
Posté le 14-10-2009 à 20:55:47  profilanswer
 

n°1171899
black_lord
Modérateur
Truth speaks from peacefulness
Posté le 14-10-2009 à 21:08:11  profilanswer
 

man indent


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
n°1171902
zecrazytux
Posté le 14-10-2009 à 21:17:39  profilanswer
 

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

n°1171903
le fou
Forza Massallia
Posté le 14-10-2009 à 21:20:56  profilanswer
 

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)
n°1171906
black_lord
Modérateur
Truth speaks from peacefulness
Posté le 14-10-2009 à 21:43:36  profilanswer
 

il fonctionne pour ce que tu veux :spamafote:


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
n°1171908
le fou
Forza Massallia
Posté le 14-10-2009 à 22:00:35  profilanswer
 

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)
n°1171912
le fou
Forza Massallia
Posté le 14-10-2009 à 22:31:31  profilanswer
 

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)
n°1171944
fighting_f​alcon
Posté le 15-10-2009 à 08:09:51  profilanswer
 

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

n°1171967
le fou
Forza Massallia
Posté le 15-10-2009 à 09:14:52  profilanswer
 

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)

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

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

 

Sujets relatifs
PAM Fichier access.conf[resolu] syntaxe pour comparer des chaines lors lecture d'un fichier
[bash/perl] comparer un nom de dossier avec la datescript bash et setuid
Fichier iso de RedHatbash, écrire dans un tableau
script sh de fichier logScript bash : exécution de plusieurs scripts
renseigner le wifi dans le fichier interfaces...WU-FTPD : création Dossiers/Fichier en 777
Plus de sujets relatifs à : [bash] Contrôler la longueur des lignes dans un fichier.


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