[HS] si mon fichier contient la premiere ligne

classic Classic list List threaded Threaded
25 messages Options
12
Reply | Threaded
Open this post in threaded view
|

[HS] si mon fichier contient la premiere ligne

David Martin
Bonjour à tous,

C'est tout bête mais je ne vois pas comment je peux faire un controle sur une ligne.

J'ai un fichier, dans lequel je génére une ligne d'éxécution (un resultat d'un bash), si j'en ai plusieurs
c'est que j'ai un problème dans l'éxécution de mon script.

Comment puis-je faire pour controler si j'ai strictement et seulement une seule ligne dans ce fichier,
mais si j'en ai plusieurs ça ne va pas ?

echo "c'est bon"


echo "c'est pas bon"

Je pourrais faire un controle si il est vide ou pas, mais ce n'est pas ça dont j'ai besoin

Si vous avez une idée ?


--
david martin

Reply | Threaded
Open this post in threaded view
|

Re: [HS] si mon fichier contient la premiere ligne

Yves Rutschle
On Thu, Jun 01, 2017 at 12:19:10PM +0200, David Martin wrote:
> Comment puis-je faire pour controler si j'ai strictement et seulement une
> seule ligne dans ce fichier,

`wc -l` compte le nombre de lignes, donc:

if wc -l fichier | grep -q "^1 " ; then echo "1 ligne" ; else echo "pas 1 seule ligne"; fi

Y.

Reply | Threaded
Open this post in threaded view
|

Re: [HS] si mon fichier contient la premiere ligne

Florian Gremiaux
In reply to this post by David Martin
Bonjour,

La commande suivante devrait suffire:
 if [ $( wc -l <nom-fichier> | cut -d" "  -f1 ) -eq 1 ]; then echo "OK"; else echo "NOK";fi

Cordialement


De: "David Martin" <[hidden email]>
À: "[hidden email] French" <[hidden email]>
Envoyé: Jeudi 1 Juin 2017 12:19:10
Objet: [HS] si mon fichier contient la premiere ligne

Bonjour à tous,
C'est tout bête mais je ne vois pas comment je peux faire un controle sur une ligne.

J'ai un fichier, dans lequel je génére une ligne d'éxécution (un resultat d'un bash), si j'en ai plusieurs
c'est que j'ai un problème dans l'éxécution de mon script.

Comment puis-je faire pour controler si j'ai strictement et seulement une seule ligne dans ce fichier,
mais si j'en ai plusieurs ça ne va pas ?

echo "c'est bon"


echo "c'est pas bon"

Je pourrais faire un controle si il est vide ou pas, mais ce n'est pas ça dont j'ai besoin

Si vous avez une idée ?


--
david martin

Reply | Threaded
Open this post in threaded view
|

Re: [HS] si mon fichier contient la premiere ligne

Lorenzo Bernardi-2
In reply to this post by David Martin

Bonjour,

wc -l te donne le nombre de ligne dans un fichier typiquement

wc -l  monfichier.txt

1234 monfichier.txt

donc

wc -l monfichier.txt | cut -c1,2 te renvoie les deux premier caractere. Toi tu veux "1 " pas seuluement le premier parceque sinon tout les fichier dont le nombre de ligne commence par 1 passe le test.

if [ $(wc -l monfichier.txt | cut -c1,2) -eq 1 ];  then

echo "OK";

else

echo "pas bon ";

fi

devrait te permettre de verifier si tu n'a qu'une ligne. $(wc -l monfichier.txt | cut -c1,2) permet de recuperer dans une variable la sortie de la commande wc -l monfichier.txt | cut -c1,2.

Après bien sur cela dépend de ton shell (ici bash)

cordialement

L.


On 06/01/2017 12:19 PM, David Martin wrote:
Bonjour à tous,

C'est tout bête mais je ne vois pas comment je peux faire un controle sur une ligne.

J'ai un fichier, dans lequel je génére une ligne d'éxécution (un resultat d'un bash), si j'en ai plusieurs
c'est que j'ai un problème dans l'éxécution de mon script.

Comment puis-je faire pour controler si j'ai strictement et seulement une seule ligne dans ce fichier,
mais si j'en ai plusieurs ça ne va pas ?

echo "c'est bon"


echo "c'est pas bon"

Je pourrais faire un controle si il est vide ou pas, mais ce n'est pas ça dont j'ai besoin

Si vous avez une idée ?


--
david martin


Reply | Threaded
Open this post in threaded view
|

Re: [HS] si mon fichier contient la premiere ligne

Daniel Caillibaud-5
Le 01/06/17 à 12:47, Lorenzo Bernardi <[hidden email]> a écrit :

LB> Bonjour,
LB>
LB> wc -l te donne le nombre de ligne dans un fichier typiquement
LB>
LB> wc -l  monfichier.txt
LB>
LB> 1234 monfichier.txt

et wc -l < monfichier.txt => 1234

LB> donc
LB>
LB> wc -l monfichier.txt | cut -c1,2 te renvoie les deux premier caractere.
LB> Toi tu veux "1 " pas seuluement le premier parceque sinon tout les
LB> fichier dont le nombre de ligne commence par 1 passe le test.
LB>
LB> if [ $(wc -l monfichier.txt | cut -c1,2) -eq 1 ];  then

plus court avec

[ "$(wc -l < monfichier.txt)" == "1" ] && echo 'ok' || echo 'KO'

--
Daniel

On reconnaît un grand enseignant au nombre d'élèves qui l'ont dépassé.

Reply | Threaded
Open this post in threaded view
|

Re: [HS] si mon fichier contient la premiere ligne

David Martin
In reply to this post by Lorenzo Bernardi-2
Merci pour vos réponses,

Je viens de faire le test avec la solution de Lorenzo, ça ne semble pas fonctionner.

Test fait avec une ligne... puis j'ai fait un echo toto >> fichier pour en rajouter une, toujours le meme resultat : pas bon.
Même sur un fichier vide ça ne passe pas.


Mon but étant de controler :

si j'ai une ligne c'est bon.. si j'en ai deux pas bon, si j'en ai 3...;etc... pas bon...
si j'en ai 0 pas bon

1 ligne OK
2 ou plus KO
0 KO

je ne sais pas si c'est possible.

Le 1 juin 2017 à 12:47, Lorenzo Bernardi <[hidden email]> a écrit :

Bonjour,

wc -l te donne le nombre de ligne dans un fichier typiquement

wc -l  monfichier.txt

1234 monfichier.txt

donc

wc -l monfichier.txt | cut -c1,2 te renvoie les deux premier caractere. Toi tu veux "1 " pas seuluement le premier parceque sinon tout les fichier dont le nombre de ligne commence par 1 passe le test.

if [ $(wc -l monfichier.txt | cut -c1,2) -eq 1 ];  then

echo "OK";

else

echo "pas bon ";

fi

devrait te permettre de verifier si tu n'a qu'une ligne. $(wc -l monfichier.txt | cut -c1,2) permet de recuperer dans une variable la sortie de la commande wc -l monfichier.txt | cut -c1,2.

Après bien sur cela dépend de ton shell (ici bash)

cordialement

L.


On 06/01/2017 12:19 PM, David Martin wrote:
Bonjour à tous,

C'est tout bête mais je ne vois pas comment je peux faire un controle sur une ligne.

J'ai un fichier, dans lequel je génére une ligne d'éxécution (un resultat d'un bash), si j'en ai plusieurs
c'est que j'ai un problème dans l'éxécution de mon script.

Comment puis-je faire pour controler si j'ai strictement et seulement une seule ligne dans ce fichier,
mais si j'en ai plusieurs ça ne va pas ?

echo "c'est bon"


echo "c'est pas bon"

Je pourrais faire un controle si il est vide ou pas, mais ce n'est pas ça dont j'ai besoin

Si vous avez une idée ?


--
david martin





--
david martin

Reply | Threaded
Open this post in threaded view
|

Re: [HS] si mon fichier contient la premiere ligne

Lorenzo Bernardi-2
In reply to this post by Daniel Caillibaud-5


On 06/01/2017 01:45 PM, Daniel Caillibaud wrote:
> [ "$(wc -l < monfichier.txt)" == "1" ] && echo 'ok' || echo 'KO'
bien vu l'utilisation du < mais c'est un petit peu dangereux. Si on
l'oublie pas plus rien ne passe le test.

L.

Reply | Threaded
Open this post in threaded view
|

Re: [HS] si mon fichier contient la premiere ligne

David Martin
In reply to this post by David Martin
wc -l monfichier.txt | cut -c1,2

me retourne toujours 0

Daniel, je test ta solution


--
david martin

Reply | Threaded
Open this post in threaded view
|

Re: [HS] si mon fichier contient la premiere ligne

David Martin
In reply to this post by David Martin
[ "$(wc -l < monfichier.txt)" == "1" ] && echo 'ok' || echo 'KO'

Ne fonctionne pas



Le 1 juin 2017 à 13:58, David Martin <[hidden email]> a écrit :
Merci pour vos réponses,

Je viens de faire le test avec la solution de Lorenzo, ça ne semble pas fonctionner.

Test fait avec une ligne... puis j'ai fait un echo toto >> fichier pour en rajouter une, toujours le meme resultat : pas bon.
Même sur un fichier vide ça ne passe pas.


Mon but étant de controler :

si j'ai une ligne c'est bon.. si j'en ai deux pas bon, si j'en ai 3...;etc... pas bon...
si j'en ai 0 pas bon

1 ligne OK
2 ou plus KO
0 KO

je ne sais pas si c'est possible.

Le 1 juin 2017 à 12:47, Lorenzo Bernardi <[hidden email]> a écrit :

Bonjour,

wc -l te donne le nombre de ligne dans un fichier typiquement

wc -l  monfichier.txt

1234 monfichier.txt

donc

wc -l monfichier.txt | cut -c1,2 te renvoie les deux premier caractere. Toi tu veux "1 " pas seuluement le premier parceque sinon tout les fichier dont le nombre de ligne commence par 1 passe le test.

if [ $(wc -l monfichier.txt | cut -c1,2) -eq 1 ];  then

echo "OK";

else

echo "pas bon ";

fi

devrait te permettre de verifier si tu n'a qu'une ligne. $(wc -l monfichier.txt | cut -c1,2) permet de recuperer dans une variable la sortie de la commande wc -l monfichier.txt | cut -c1,2.

Après bien sur cela dépend de ton shell (ici bash)

cordialement

L.


On 06/01/2017 12:19 PM, David Martin wrote:
Bonjour à tous,

C'est tout bête mais je ne vois pas comment je peux faire un controle sur une ligne.

J'ai un fichier, dans lequel je génére une ligne d'éxécution (un resultat d'un bash), si j'en ai plusieurs
c'est que j'ai un problème dans l'éxécution de mon script.

Comment puis-je faire pour controler si j'ai strictement et seulement une seule ligne dans ce fichier,
mais si j'en ai plusieurs ça ne va pas ?

echo "c'est bon"


echo "c'est pas bon"

Je pourrais faire un controle si il est vide ou pas, mais ce n'est pas ça dont j'ai besoin

Si vous avez une idée ?


--
david martin





--
david martin




--
david martin

Reply | Threaded
Open this post in threaded view
|

Re: [HS] si mon fichier contient la premiere ligne

Lorenzo Bernardi-2
In reply to this post by David Martin



On 06/01/2017 01:58 PM, David Martin wrote:
Merci pour vos réponses,

Je viens de faire le test avec la solution de Lorenzo, ça ne semble pas fonctionner.

dans le cas d'une ligne que renvoie
wc -l monfichier.txt?
et
wc -l monfichier.txt cut -c1,2?

La réponse de Florian Gremiaux  en cut -d" "  -f1 est plus propre on utilise le delimiteur " "et on prend le premier champ.
Sinon la reponse de Daniel est plutot subtile et donc a utiliser en comprenant bien ce qui se passe.

Je viens de lire ton nouveau message on est bien d'accord que tu remplace monfichier.txt par le nom de ton fichier. Si cela renvoie zero j'ai l'impression que tu ne teste pas le bon fichier.

cordialement

L.
Reply | Threaded
Open this post in threaded view
|

Re: [HS] si mon fichier contient la premiere ligne

David Martin
In reply to this post by David Martin
Yves j'y ai cru ;-)

~#wc -l supMajUserEmargos | grep -q "^1 " ; then echo "1 ligne" ; else echo "pas 1 seule ligne"; fi
pas 1 seule ligne
~#
alors que le fichier en contient une et une seule.

Pas si simple ;-)





Le 1 juin 2017 à 14:04, David Martin <[hidden email]> a écrit :
[ "$(wc -l < monfichier.txt)" == "1" ] && echo 'ok' || echo 'KO'

Ne fonctionne pas



Le 1 juin 2017 à 13:58, David Martin <[hidden email]> a écrit :
Merci pour vos réponses,

Je viens de faire le test avec la solution de Lorenzo, ça ne semble pas fonctionner.

Test fait avec une ligne... puis j'ai fait un echo toto >> fichier pour en rajouter une, toujours le meme resultat : pas bon.
Même sur un fichier vide ça ne passe pas.


Mon but étant de controler :

si j'ai une ligne c'est bon.. si j'en ai deux pas bon, si j'en ai 3...;etc... pas bon...
si j'en ai 0 pas bon

1 ligne OK
2 ou plus KO
0 KO

je ne sais pas si c'est possible.

Le 1 juin 2017 à 12:47, Lorenzo Bernardi <[hidden email]> a écrit :

Bonjour,

wc -l te donne le nombre de ligne dans un fichier typiquement

wc -l  monfichier.txt

1234 monfichier.txt

donc

wc -l monfichier.txt | cut -c1,2 te renvoie les deux premier caractere. Toi tu veux "1 " pas seuluement le premier parceque sinon tout les fichier dont le nombre de ligne commence par 1 passe le test.

if [ $(wc -l monfichier.txt | cut -c1,2) -eq 1 ];  then

echo "OK";

else

echo "pas bon ";

fi

devrait te permettre de verifier si tu n'a qu'une ligne. $(wc -l monfichier.txt | cut -c1,2) permet de recuperer dans une variable la sortie de la commande wc -l monfichier.txt | cut -c1,2.

Après bien sur cela dépend de ton shell (ici bash)

cordialement

L.


On 06/01/2017 12:19 PM, David Martin wrote:
Bonjour à tous,

C'est tout bête mais je ne vois pas comment je peux faire un controle sur une ligne.

J'ai un fichier, dans lequel je génére une ligne d'éxécution (un resultat d'un bash), si j'en ai plusieurs
c'est que j'ai un problème dans l'éxécution de mon script.

Comment puis-je faire pour controler si j'ai strictement et seulement une seule ligne dans ce fichier,
mais si j'en ai plusieurs ça ne va pas ?

echo "c'est bon"


echo "c'est pas bon"

Je pourrais faire un controle si il est vide ou pas, mais ce n'est pas ça dont j'ai besoin

Si vous avez une idée ?


--
david martin





--
david martin




--
david martin




--
david martin

Reply | Threaded
Open this post in threaded view
|

Re: [HS] si mon fichier contient la premiere ligne

Jean-Marc
Quelques solutions vite fait :
$ wc -l essai
1 essai

$ wc -l essai | cut -d" "  -f1
1

$ cat essai | wc -l
1

$ wc -l essai | grep ^1\ *>/dev/null && echo une seule ligne
une seule ligne


Jean-Marc <[hidden email]>

attachment0 (849 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: [HS] si mon fichier contient la premiere ligne

David Martin
In reply to this post by Lorenzo Bernardi-2
avec ou sans ça ne fonctionne pas


--
david martin

Reply | Threaded
Open this post in threaded view
|

Re: [HS] si mon fichier contient la premiere ligne

David Martin
In reply to this post by Lorenzo Bernardi-2
# cat supMajUserEmargos 
1 utilisateur(s) EMARGOS trouv�(s), 0 mis � jour, 1 non trouv�(s) dans le LDAP,  0 mise � jour non effectu�e

# vi supMajUserEmargos
1 utilisateur(s) EMARGOS trouvé(s), 0 mis à jour, 1 non trouvé(s) dans le LDAP,  0 mise à jour non effectuée

le wc -l  retourne 0 quoi qu'il arrive.


# wc -l supMajUserEmargos cut -c 1,2
  0 108 supMajUserEmargos
wc: cut: Aucun fichier ou dossier de ce type
wc: 1,2: Aucun fichier ou dossier de ce type
  0 108 total




Le 1 juin 2017 à 14:06, Lorenzo Bernardi <[hidden email]> a écrit :



On 06/01/2017 01:58 PM, David Martin wrote:
Merci pour vos réponses,

Je viens de faire le test avec la solution de Lorenzo, ça ne semble pas fonctionner.

dans le cas d'une ligne que renvoie
wc -l monfichier.txt?
et
wc -l monfichier.txt cut -c1,2?

La réponse de Florian Gremiaux  en cut -d" "  -f1 est plus propre on utilise le delimiteur " "et on prend le premier champ.
Sinon la reponse de Daniel est plutot subtile et donc a utiliser en comprenant bien ce qui se passe.

Je viens de lire ton nouveau message on est bien d'accord que tu remplace monfichier.txt par le nom de ton fichier. Si cela renvoie zero j'ai l'impression que tu ne teste pas le bon fichier.

cordialement

L.



--
david martin

Reply | Threaded
Open this post in threaded view
|

Re: [HS] si mon fichier contient la premiere ligne

Lorenzo Bernardi-2
Re'

On 06/01/2017 02:35 PM, David Martin wrote:

> # cat supMajUserEmargos
> 1 utilisateur(s) EMARGOS trouv�(s), 0 mis � jour, 1 non trouv�(s) dans
> le LDAP,  0 mise � jour non effectu�e
>
> # vi supMajUserEmargos
> 1 utilisateur(s) EMARGOS trouvé(s), 0 mis à jour, 1 non trouvé(s) dans
> le LDAP,  0 mise à jour non effectuée
>
> le wc -l  retourne 0 quoi qu'il arrive.
>
>
> # wc -l supMajUserEmargos cut -c 1,2
>   0 108 supMajUserEmargos
> wc: cut: Aucun fichier ou dossier de ce type
> wc: 1,2: Aucun fichier ou dossier de ce type
>   0 108 total
>
en fait il faut le | entre wc -l supMajUserEmargos et cut -c 1,2 tu dois
en fait taper
wc -l supMajUserEmargos | cut -c 1,2

ce qui devrait te donner
0 supMajUserEmargos

car en fait si tu ne met pas le | il te donne la commande
wc -l -c supMajUserEmargos cut 1,2
et cette commande te donne le nombre de ligne -l et de bytes -c.

Tu n'as pas de ligne le premier 0 parceque tu ne finis pas par un \n ton
fichier. En fait wc -l compte le nombre de new line \n. Comment crees tu
ton fichier?

cordialement


Reply | Threaded
Open this post in threaded view
|

Re: [HS] si mon fichier contient la premiere ligne

Yves Rutschle
In reply to this post by David Martin
On Thu, Jun 01, 2017 at 02:09:46PM +0200, David Martin wrote:
> Yves j'y ai cru ;-)
>
> alors que le fichier en contient une et une seule.

J'avais testé, et "ça marche chez moi"(TM).

Que te renvoie wc -l?

Qu'y a-t-il dans ton fichier quand tu crois qu'il y a une
ligne? Pour voir en hexa:
  xxd fichier.txt

 Y.

Reply | Threaded
Open this post in threaded view
|

Re: [HS] si mon fichier contient la premiere ligne

Charles Plessy-12
In reply to this post by Lorenzo Bernardi-2
Bonjour, c'est vendredi !

pourquoi s'ennuyer avec des outils standards alors qu'on a Perl 6 ?

$ cat > toto3 <<__FIN__
> ligne 1
> ligne 2
> ligne 3
> __FIN__

$ perl6 -ne 'state $i++ ; exit 1 if $i > 1' toto3 && echo "Une seule ligne."

$ cat > toto1 <<__FIN__                                                    
ligne 1
__FIN__

$ perl6 -ne 'state $i++ ; exit 1 if $i > 1' toto1 && echo "Une seule ligne."
Une seule ligne.

Bonne fin de semaine,

Conclusion, apt install perl6.

Charles

--
Charles Plessy
Tsurumi, Kanagawa, Japan

Reply | Threaded
Open this post in threaded view
|

Re: [HS] si mon fichier contient la premiere ligne

Charles Plessy-12
Le Fri, Jun 02, 2017 at 09:53:25AM +0900, Charles Plessy a écrit :
>
> $ cat > toto3 <<__FIN__
> > ligne 1
> > ligne 2
> > ligne 3
> > __FIN__

Oups, sans les chevrons ci-dessus:

$ cat > toto3 <<__FIN__
ligne 1
ligne 2
ligne 3
__FIN__

Désolé pour le bruit,

(Ça doit être l'effet vendredi)

--
Charles

Reply | Threaded
Open this post in threaded view
|

Re: [HS] si mon fichier contient la premiere ligne

David Martin
In reply to this post by Lorenzo Bernardi-2
Lorenzo,

merci pour ton annalyse, je ne construit pas le fichier, c'est une application métier.

Je vais essayer de le rajouter le \n pour voir

--
david martin

Reply | Threaded
Open this post in threaded view
|

Re: [HS] si mon fichier contient la premiere ligne

David Martin
Tu avais raison, avec le \n ça fonctionne j'ai bien le compteur à 1

Je vais remonter cette annomalie pour qu'il rajoute le \n dans le fichier généré, 

en attendant on me demande de faire une moulinette qui vérifie que le script qui génère ce fichier
soit bien exécuter toutes les 15 mintues. voici son vrai nom :

voici : BatchMajInfoUtilisateurEmargos20170602090001.log

C'est ce fameux fichier qui doit contenir le \n

Je me demande bien comment faire ça, je peux rajouter dans le script en crontab, de générer un fichier
qui contiendrait la date du jour + heure et minute du genre 

/tmp/time

20170905 (pour 9h05)

mais comment et avec quoi faire la comparaison pour savoir qu'à la prochaine génération du fichier /tmp/time c'est bon ou pas.

Je suis en panne sèche...

Je vais remonter de suite le problème d'anti-slash n




Le 2 juin 2017 à 08:50, David Martin <[hidden email]> a écrit :
Lorenzo,

merci pour ton annalyse, je ne construit pas le fichier, c'est une application métier.

Je vais essayer de le rajouter le \n pour voir

--
david martin




--
david martin

12