[SHELL] Compaison du nombre de lignes

Résolu/Fermé
xavdoug Messages postés 21 Date d'inscription samedi 21 avril 2007 Statut Membre Dernière intervention 16 novembre 2007 - 23 avril 2007 à 23:12
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 25 avril 2007 à 08:38
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.
A voir également:

7 réponses

je ne suis pas sûr mais essaie de remplacer les ' par ".
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
24 avril 2007 à 08:27
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
xavdoug Messages postés 21 Date d'inscription samedi 21 avril 2007 Statut Membre Dernière intervention 16 novembre 2007
24 avril 2007 à 14:29
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
24 avril 2007 à 14:43
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
24 avril 2007 à 14:51
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
xavdoug Messages postés 21 Date d'inscription samedi 21 avril 2007 Statut Membre Dernière intervention 16 novembre 2007
24 avril 2007 à 16:48
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
24 avril 2007 à 17:10
Vire le 1er "shebang" (#! /bin/sh ), rajoute "endif" à la place du "fi" et ressaye...
0
xavdoug Messages postés 21 Date d'inscription samedi 21 avril 2007 Statut Membre Dernière intervention 16 novembre 2007
24 avril 2007 à 17:46
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
24 avril 2007 à 18:59
#! /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
xavdoug Messages postés 21 Date d'inscription samedi 21 avril 2007 Statut Membre Dernière intervention 16 novembre 2007
24 avril 2007 à 21:36
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
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895 > xavdoug Messages postés 21 Date d'inscription samedi 21 avril 2007 Statut Membre Dernière intervention 16 novembre 2007
24 avril 2007 à 22:47
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
xavdoug Messages postés 21 Date d'inscription samedi 21 avril 2007 Statut Membre Dernière intervention 16 novembre 2007 > xavdoug Messages postés 21 Date d'inscription samedi 21 avril 2007 Statut Membre Dernière intervention 16 novembre 2007
25 avril 2007 à 04:48
Merci beaucoup pour ton aide. Tout est résolu maintenant.

;-)
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895 > xavdoug Messages postés 21 Date d'inscription samedi 21 avril 2007 Statut Membre Dernière intervention 16 novembre 2007
25 avril 2007 à 08:38
De rien ;-))
0