[Tester une ligne vide en shellscript]

Ghis -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour à tous,
Comment pourrais-je tester si une ligne d'un fichier est vide?
Par exemple tester la ligne 11 est faire un traitement si celle-ci est vide?
Merci par avance.

10 réponses

  1. caec
     
    tu peux faire un truc simple comme :

    if [ `cat -n fichier | grep ^11 | cut -d" " -f2 | wc -c` -eq 0 ]; then 
    .....
    else
    .....
    fi
    


    cat -n = afficher les lignes avec les numero
    grep ^11 = trier et afficher que la ligne commençant par 11 (11eme)
    cut = virer le n° avant de compter les lettres de la ligne
    wc -c = compter les caracteres

    -eq 0 = tester l'egalité avec zéro.
    0
  2. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     
    Salut,

    head -11 fichier | tail -1

    Me semble plus sûr pour afficher la ligne 11. Celà évite de rencontrer 11, 110, 111, ... et celà évite d'avoir à gérer les différences de format de "cat -n" qui peuvent, selon les implémentations, ne pas afficher les numéros de lignes de la même manière (par exemple sur FreeBSD il me met 4 espaces en début de ligne avant le numéro et une tabulation après).

    Dal
    0
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Tu peux aussi passer par le filtre "sed" :
    sed -n 11p le_fichier
    ;-))
    0
    1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      Merci Jipicy, c'est d'une telle simplicité !

      C'est vraiment étonnant tout ce qu'on peut faire avec sed.


      Dal
      0
      1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention  
         
        De rien ;-))

        C'est vraiment étonnant tout ce qu'on peut faire avec sed.
        Ouais, et c'est ça qui me désole... j'ai l'impression qu'une vie ne suffira pas à en faire le tour, et je parle même pas de "awk" et consort :-((

        ;-DDDDDD

        Ma bible en la matière pour ce qui est du shell (sed compris) :
        http://tinyurl.com/axwb6
        et récemment : http://www.blaess.fr/christophe/publications/scriptlinux/index.html
        0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. Ghis
     
    OK merci tt le monde je vais tester tout ça :)
    Bonne journée
    0
  6. Ghis
     
    Bonjour,
    pour la commande sed -n 11p le_fichier
    Puis-je faire un test du type:

    if ( sed -n 11p le_fichier ) then
    $V="OK"
    else
    $V="NOK"
    endif

    car j'ai une erreur de syntaxe?

    Merci.
    0
  7. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    La commande "sed -n 11p le_fichier" ne fait que retourner (afficher) la ligne "11" (une ligne vide si elle est vide, une chaine de caractères si elle n'est pas vide).

    Il faut donc évaluer ladite ligne comme le suggérait "caec" dans le post "1, mais on va plutôt compter les mots (s'il y en a) avec l'option "-w" de la commande "wc" (word count) et ensuite comparer ce résultat, autrement dit voir s'il est égal à "0" ou non...
    [jp@Mandrake tmpfs]$ cat fichier.txt
    cat -n = afficher les lignes avec les numero
    grep ^11 = trier et afficher que la ligne commençant par 11 (11eme)
    cut = virer le n° avant de compter les lettres de la ligne
    wc -c = compter les caracteres
    
    -eq 0 = tester l'egalité avec zéro.
    
    [jp@Mandrake tmpfs]$ if [ `sed -n 5p fichier.txt | wc -w` -eq 0 ];then echo "C'est good"; else echo "C'est pas good";fi
    C'est good
    
    [jp@Mandrake tmpfs]$ if [ `sed -n 6p fichier.txt | wc -w` -eq 0 ];then echo "C'est good"; else echo "C'est pas good";fi
    C'est pas good
    
    [jp@Mandrake tmpfs]$
    Voilà, à adapter à ton cas.
    0
  8. Ghis
     
    Bonjour,
    Mais si on n'a pas de numero de ligne....
    0
  9. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Ben tu testes déjà pour savoir si ton fichier contient ou pas de lignes vides :
    grep '^$' fichier.txt
    Puis tu traites en fonction ;-)
    0