[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 -
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.
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
-
-
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
;-))
-
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-
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 $
;-))
-
-
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 ;-))
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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 -
Vire le 1er "shebang" (#! /bin/sh ), rajoute "endif" à la place du "fi" et ressaye...
-
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 ?-
#! /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
;-))
-
-