[SHELL] Compaison du nombre de lignes
Résolu
xavdoug
Messages postés
21
Date d'inscription
Statut
Membre
Dernière intervention
-
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.
A voir également:
- [SHELL] Compaison du nombre de lignes
- Classic shell - Télécharger - Personnalisation
- Nombre de jours entre deux dates excel - Guide
- Partage de photos en ligne - Guide
- Nombre facile - Télécharger - Outils professionnels
- Nombre de page - Guide
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" :
Voilà un 2nd script pour un shell "bash" :
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" endifBien é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
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...
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
#! /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
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 ?
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;-))