IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Nombre de lignes vides à la fin d'un fichier


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 258
    Par défaut Nombre de lignes vides à la fin d'un fichier
    Bonjour à tous,

    J'aimerais faire un petit shell qui me permet de compter le nombre de ligne vide à la fin d'un fichier.
    J'ai écris quelque chose qui ne marche pas parfaitement. Le but est également de trouver le format des retours charriots (unix ou windows).
    J'ai 3 fichiers, sans.txt, une.txt, deux.txt avec 0, 1 et 2 lignes vides à la fin, de format windows.

    sans.txt
    Nom : mini_382603Capture1.png
Affichages : 1834
Taille : 8,0 Ko

    une.txt
    Nom : mini_490429Capture2.png
Affichages : 1846
Taille : 6,8 Ko

    deux.txt
    Nom : mini_357357Capture3.png
Affichages : 1853
Taille : 6,1 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    for FILE in `find "." -type f`
    do
    	NAME=`basename "$FILE"`
    	if [ $(tail -n 2 "$FILE" | od -c | grep -F "\r" | wc -l) -eq 1 ]
    	then
    		CHARRIOT="WINDOWS"
    		LIGNE=$(tail -n 2 "$FILE" | od -c | sed "s/ //g" | sed "s/\\\r\\\n/#/g" | grep -o "#" | wc -l)
    	else
    		CHARRIOT="UNIX"
    		LIGNE=$(tail -n 2 "$FILE" | od -c | sed "s/ //g" | sed "s/\\\n/#/g" | grep -o "#" | wc -l)
    	fi
    	echo "$NAME : $CHARRIOT, $LIGNE ligne vide a la fin"
    done
    Voici le résultat erroné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    deux.txt : WINDOWS, 2 ligne vide a la fin
    une.txt : WINDOWS, 2 ligne vide a la fin
    sans.txt : WINDOWS, 1 ligne vide a la fin
    Peut-être y'a t-il un moyen plus simple ?
    Merci d'avance

  2. #2
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 293
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $ cat /tmp/toto.txt
    df
     
    dfg
    df
     
     
    dsfg
     
     
    dfsg
     
     
     
    $ tac /tmp/toto.txt |sed -n '/[^ \t]/q;p'|wc -l
    3

  3. #3
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 660
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ todos ./"$fichier"
    $ file -b ./"$fichier" 
    ASCII text, with CRLF line terminators
    $ fromdos ./"$fichier"
    $ file -b ./"$fichier" 
    ASCII text
    $
    $ cp ./"$fichier" ./"$fichier".plus
    $ echo -e "\n\n\n" >>./"$fichier".plus
    $ sed -n '$=' ./"$fichier".plus
    12
    $ sed -n ':c;N;$!bc;s/\n*$//p' ./"$fichier".plus | sed -n '$='
    8
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 349
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 349
    Par défaut
    Bonjour,

    Si on ne trie pas le fichier, on peut le faire avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    uniq -c fichier | tail -1
    ceci donnera la dernière ligne préfixée du nombre de fois qu'elle est répétée à la fin du fichier en question

  5. #5
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 258
    Par défaut
    Merci pour vos réponses, mais après avoir tester sur mon exemple ça ne fonctionne pas..

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 660
    Par défaut
    «ça marche pas»

    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. [XL-2003] Problème de ligne vide (ctrl + fin)
    Par makila64 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/07/2012, 15h59
  2. ne pas avoir de lignes vide en fin de page
    Par Louisa2005 dans le forum Word
    Réponses: 4
    Dernier message: 16/03/2010, 22h58
  3. Réponses: 2
    Dernier message: 10/12/2009, 17h05
  4. DataGridView ligne vide à la fin..
    Par lucfrfr dans le forum Windows Forms
    Réponses: 7
    Dernier message: 08/11/2007, 14h35
  5. Sous-Formulaire nombre de lignes vides ?
    Par popo68 dans le forum IHM
    Réponses: 25
    Dernier message: 11/12/2006, 09h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo