[SHELL] Compaison du nombre de lignes

Résolu
xavdoug Messages postés 21 Date d'inscription   Statut Membre -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour à tous,

Je cherche à comparer si trois fichiers ont le même nombre de lignes. Voici mon code :

set nlines1 = `wc -l KsPiPi0_distribs/fichier1.dat | awk '{print $1}'`
set nlines2 = `wc -l KsPiPi0_distribs/fichier2.dat | awk '{print $1}'`
set nlines3 = `wc -l KsPiPi0_distribs/fichier3.dat | awk '{print $1}'`

if ( $nlines1==$nlines2 && $nlines2==$nlines3) then
echo "Files are OK !"

Ce code ne fonctionne pas : il me sort
syntax error near unexpected token `='
Et il n'a pas l'air de connaître les $var ...
Pouvez-vous m'aider ? Merci d'avance.
Configuration: Windows XP
Internet Explorer 7.0

7 réponses

  1. nyk
     
    je ne suis pas sûr mais essaie de remplacer les ' par ".
    0
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    D'abord quel est ton shell ? Au vu de la syntaxe du C-shell (csh), non ?
    Voilà un 1er script pour du "csh" :
    #! /bin/csh
    
    set nb1=`sed -n '$=' fich1`
    set nb2=`sed -n '$=' fich2`
    set nb3=`sed -n '$=' fich3`
    
    if ( "$nb1" == "$nb2" && "$nb1" == "$nb3" ) then
    echo "OK"
    else
    echo "NOK"
    endif
    Bien évidemment remplacer les noms de fichiers par les tiens. Comme tu peux le voir par rapport à ta syntaxe, pas d'espace lors de la déclaration des variables de part et d'autre du signe égale.

    Voilà un 2nd script pour un shell "bash" :
    #! /bin/bash
    
    nb1=$(sed -n '$=' fich1)
    nb2=$(sed -n '$=' fich2)
    nb3=$(sed -n '$=' fich3)
    
    if [ "$nb1" == "$nb2" -o "$nb1" == "$nb3" ]
    then
    echo "Ok"
    else
    echo "Nok"
    fi
    ;-))
    0
  3. xavdoug Messages postés 21 Date d'inscription   Statut Membre
     
    Salut,

    Merci pour vos réponses. Je suis effectivement en C-shell.

    J'ai essayé la commande :
    set nb1=`sed -n '$=' fich1`
    echo nb1 = $nb1

    Il m'affiche nb1 = (sans rien derrière le =)
    Il ne rentre pas non plus dans la boucle if, avec trois fichiers à nombres de lignes égaux.

    Avez-vous une idée de solution ? Je continue à chercher de mon côté. Merci beaucoup
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Attention de bien changer le "fich1" par le fichier correspondant au tien, hein ? ;-)

      Sinon moi de mon côté je n'ai pas de problèmes...
      $ ls fich*
      fich1  fich2  fich3
      
      $ cat fich*
      ligne1
      ligne2
      ligne3
      ligne4
      
      ligne1
      ligne2
      ligne3
      ligne4
      
      ligne1
      ligne2
      ligne3
      ligne4
      
      $ cat essai.csh
      #! /bin/csh
      
      set nb1=`sed -n '$=' fich1`
      set nb2=`sed -n '$=' fich2`
      set nb3=`sed -n '$=' fich3`
      
      if ( "$nb1" == "$nb2" && "$nb1" == "$nb3" ) then
      echo "OK"
      else
      echo "Nok"
      endif
      
      $ ./essai.csh
      OK
      
      $ sed -n '$=' fich1
      4
      
      $ 
      ;-))
      0
  4. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Au cas ou, en lieu et place du "sed" tu peux remettre ta ligne ou celle-là :
    nb=`wc -l fich1 | cut -d " " -f1`
    en remplaçant "fich1" par ton fichier ;-))
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. xavdoug Messages postés 21 Date d'inscription   Statut Membre
     
    Ca ne marche toujours pas. En entête du programme, j'ai #! /bin/sh
    #! /bin/csh -f
    J'ai besoin des deux pour mon code.

    Je copie mon code, y'a-t-il un problème ?

    set nlines_tm=`sed -n "$=" fichier1.dat`
    echo nlines_tm=$nlines_tm
    set nlines_scf=`sed -n "$=" fichier2.dat`
    set nlines_truth=`sed -n "$=" fichier3.dat`
    echo ca marche
    if ( "$nlines_tm" == "$nlines_scf" && "$nlines_tm" == "$nlines_truth") then
    echo "Ok."
    else
    echo "Not Ok."
    fi

    Il m'affiche :
    nlines_tm =
    ca marche
    fichier.csh: : command not found (ligne du 'if')
    Not Ok
    (alors que les fichiers ont le même nombre de lignes et que les noms sont bons).
    Merci de ton aide
    0
  7. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Vire le 1er "shebang" (#! /bin/sh ), rajoute "endif" à la place du "fi" et ressaye...
    0
  8. xavdoug Messages postés 21 Date d'inscription   Statut Membre
     
    Seulement, si je supprime le /bin/sh, vu que j'ai un case dans mon programme, il m'affiche :

    syntax error near unexpected token `;;'

    Comment puis-je y remédier ?
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      #! /bin/csh -f
      
      set nb1=`sed -n '$=' fich1`
      set nb2=`sed -n '$=' fich2`
      set nb3=`sed -n '$=' fich3`
      
      echo nlines_tm = $nb1
      if ( "$nb1" == "$nb2" && "$nb1" == "$nb3" ) then
      echo "OK"
      else
      echo "Nok"
      endif
      
      switch ($nb1)
      case 1:
      echo un
      breaksw
      case 2:
      echo deux
      breaksw
      case 3:
      echo trois
      breaksw
      case 4:
      echo quatre
      breaksw
      default:
      echo "Autre que 1, 2, 3 ou 4."
      breaksw
      endsw
      ;-))
      0
    2. xavdoug Messages postés 21 Date d'inscription   Statut Membre
       
      Ok merci, j'ai un autre soucis.

      Il ne comprend pas la commande 'read' dans :

      echo -n "Question ? "
      read reponse

      Y'a-t-il une commande équivalente en C-shell ?
      Merci
      0
      1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > xavdoug Messages postés 21 Date d'inscription   Statut Membre
         
        Re-
        #! /bin/csh
        
        echo -n "Question ? "
        set reponse=($<)
        echo
        echo "La question est : $reponse"
        echo
        
        
        
        $ ./try
        Question ? Pourquoi pas !
        
        La question est : Pourquoi pas !
        
        
        ;-))
        0
      2. xavdoug Messages postés 21 Date d'inscription   Statut Membre > xavdoug Messages postés 21 Date d'inscription   Statut Membre
         
        Merci beaucoup pour ton aide. Tout est résolu maintenant.

        ;-)
        0
      3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > xavdoug Messages postés 21 Date d'inscription   Statut Membre
         
        De rien ;-))
        0