Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/05/2008, 14h44   #1
Membre à l'essai
 
Inscription : avril 2008
Messages : 140
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 140
Points : 21
Points : 21
Par défaut problème script et commande awk

Bonjour,
dans le répertoire mami/tot/jpg j'ai 6 fichiers(A,B,c,d,e,f) et dans le fichier d
voila ce que j'ai par exemple ce genre de lignes plusieurs fois:
02C8020060901148977I081020000
02C80200609061660002700070603
02C80200609083520002822080610
02C80200609100531003171010279


je veux recupérer dans 2variables var1 et var2 (les elements à parir du 6ème element au 13 element) qui signifie année ,le mois et le jour.
sachant que var1 est egaleà la plus petite date(date avant) ,et var2 la plus grande date :
var1=20060901
var2=20060910



minute=`date +%M`
heure=`date +%H`
jour=`date +%d`
mois=`date +%B`
an=`date +%Y`
mois_chiffre=`date +%m`
VAR="CUBE_`date +%B`"
#export an mois jour heure minute
interface="PH7"
if [ ! -e mami/tot/jpg ] [! -e fichier d]
then

var1=`vi fichier d | tail -1 | head -1 | awk '{ print $6, $7, $8,...,$13}' `
var2=`vi fichier d | tail -1 | head -1 | awk '{ print $6, $7, $8,...,$13}' `

echo " ${var1} ,${var2} $an " | mail -s "Information sur ${var} du $jour $mois $an" mamamamamma@chut.fr
fi
aidez moi svp je ne sais pas prquoi ça ne marche pas
quand j'exécute j'ai rien comme message
sajodia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2008, 16h57   #2
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
Salut !
J'ai pas regardé tout ton code, awk ne marche pas ainsi :
awk te parse des colonnes en fonction d'un séparteur.
Si tu veux travailler sur des position, tu peux utiliser "cut -c"
"cut -c6-13 MonFichier" te renvoie les caractères "numérotés" de 6 à 13 pour chaque ligne.

Bon courage.
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2008, 17h06   #3
Membre éprouvé
 
Homme
Ingénieur systèmes et réseaux
Inscription : août 2007
Messages : 508
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux

Informations forums :
Inscription : août 2007
Messages : 508
Points : 464
Points : 464
Ca marche pas?
Une chose très pratique en shell pour tester si ta commande a réussi, tu tapes

$? est le code de retour de ta commande. S'il vaut zero, c'est que la commande a réussi et différent zero dans le cas contraire.
Et à mon avis, c'est au niveau de la cmd awk que ca marche vu que t'as pas indiqué de Field Separator avec l'option -F. Donc je te conseille d'utiliser la commande sed.

D'apres ce que j'ai compris, tu veux récupérer les dates qui se trouvent sur la première et la dernière ligne du fichier.
Je te donne la réponse pour var1:

Code :
1
2
 
var1=$(head -n 1 fichier | sed -r -e 's/ [0-9]{2}[A-Z][0-9]{2}([0-9]{8}).*/\1/p')
Je te conseille vivement de mieux te documenter sur le shell et ses capacités surtout dans ce genre de situation, ce qui te sera util après.
publicStaticVoidMain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2008, 09h53   #4
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
Petite remarque :
Je pense qu'il faut échapper un certain nombre de caractères dans tes expressions :

Code :
1
2
 
sed -r -e 's/ [0-9]\{2\}[A-Z][0-9]\{2\}\([0-9]\{8\}\).*/\1/p'
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2008, 10h06   #5
Membre Expert
 
Inscription : octobre 2005
Messages : 1 403
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : octobre 2005
Messages : 1 403
Points : 1 600
Points : 1 600
Envoyer un message via MSN à iohack
Citation:
Envoyé par publicStaticVoidMain Voir le message
Ca marche pas?
[...]
Je te donne la réponse pour var1:

Code :
1
2
 
var1=$(head -n 1 fichier | sed -r -e 's/ [0-9]{2}[A-Z][0-9]{2}([0-9]{8}).*/\1/p')
[...]
pourquoi faire simple quand on peut faire compliqué
Code :
1
2
 
var1=$(head -n 1 fichier |cut -c6-12)
avec awk :
Code :
1
2
 
var1=$(head -n 1 fichier |awk '{print substr($0,6,6)}')
iohack est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2008, 10h14   #6
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
Citation:
Envoyé par iohack Voir le message
pourquoi faire simple quand on peut faire compliqué
Code :
1
2
 
var1=$(head -n 1 fichier |cut -c6-12)
Entre les indices 6 et 12, il y a 7 caractères
(Ah, ce que j'aime être lourd !)
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2008, 10h17   #7
Membre à l'essai
 
Inscription : avril 2008
Messages : 140
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 140
Points : 21
Points : 21
j'ai aissayé ce que vous m'avez dit mais ça ne marche pas
sajodia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2008, 10h23   #8
Membre à l'essai
 
Inscription : avril 2008
Messages : 140
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 140
Points : 21
Points : 21
var1 n'est obligatoirement pas la date de la 1ère ligne la date la plus petite qui peut etre à n'importe quelle ligne ainsi que var2.
merci de m'aidez
sajodia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2008, 10h32   #9
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
awk te permet de réaliser des opérations sur chaque ligne.
Tape "man awk", c'est utile.

Tu vois l'algorithme basique te permettant de connaître le min et le max de manière itérative (imagine que tu lis le fichier ou l'entrée formattée dans une boucle FOR) ?

Ben c'est la même, en utilisant les clauses BEGIN et END de awk.
(je te laisse te documenter sur le sujet)
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2008, 11h05   #10
Membre éprouvé
 
Homme
Ingénieur systèmes et réseaux
Inscription : août 2007
Messages : 508
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux

Informations forums :
Inscription : août 2007
Messages : 508
Points : 464
Points : 464
Citation:
Envoyé par iohack Voir le message
pourquoi faire simple quand on peut faire compliqué
Code :
1
2
 
var1=$(head -n 1 fichier |cut -c6-12)
avec awk :
Code :
1
2
 
var1=$(head -n 1 fichier |awk '{print substr($0,6,6)}')
Ouiais, on pouvait effectivement utiliser la cmd cut mais ca m'a permis de réviser sed et les regexp avant les exams .
publicStaticVoidMain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2008, 11h07   #11
Membre éprouvé
 
Homme
Ingénieur systèmes et réseaux
Inscription : août 2007
Messages : 508
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux

Informations forums :
Inscription : août 2007
Messages : 508
Points : 464
Points : 464
Citation:
Envoyé par pacmann Voir le message
Petite remarque :
Je pense qu'il faut échapper un certain nombre de caractères dans tes expressions :

Code :
1
2
 
sed -r -e 's/ [0-9]\{2\}[A-Z][0-9]\{2\}\([0-9]\{8\}\).*/\1/p'
Euh....... non puisque j'utilise les expressions régulières étendues avec l'option -r.
J'ai testé avant et j'ai vu que ca marchait.
publicStaticVoidMain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2008, 11h11   #12
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
Ok, désolé.
Je ne dispose pas de l'option -r... ça doit être une question de version de Shell...
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2008, 11h15   #13
Membre à l'essai
 
Inscription : avril 2008
Messages : 140
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 140
Points : 21
Points : 21
voila ce que j'ai fait
!/bin/ksh
minute=`date +%M`
heure=`date +%H`
jour=`date +%d`
#mois=`date +%B`
#an=`date +%Y`
an=2007
mois=SEPTEMBRE
if [ -e /sextantapp/m1/fic/PH7/$an/$mois -a -e fichier d ]
then

var1= sed -r -e 's/ [0-9]\{2\}[A-Z][0-9]\{2\}\([0-9]\{8\}\).*/\1/p'
var2=
echo " datextrac: ${var1}" | mail -s "Information " siiiiiiiii@yahoo.fr
fi
mais j'ai rien à l'envoi de mail
sajodia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2008, 11h21   #14
Membre éprouvé
 
Homme
Ingénieur systèmes et réseaux
Inscription : août 2007
Messages : 508
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux

Informations forums :
Inscription : août 2007
Messages : 508
Points : 464
Points : 464
Citation:
Envoyé par sajodia Voir le message
voila ce que j'ai fait
!/bin/ksh
minute=`date +%M`
heure=`date +%H`
jour=`date +%d`
#mois=`date +%B`
#an=`date +%Y`
an=2007
mois=SEPTEMBRE
if [ -e /sextantapp/m1/fic/PH7/$an/$mois -a -e fichier d ]
then

var1= sed -r -e 's/ [0-9]\{2\}[A-Z][0-9]\{2\}\([0-9]\{8\}\).*/\1/p'
var2=
echo " datextrac: ${var1}" | mail -s "Information " siiiiiiiii@yahoo.fr
fi
mais j'ai rien à l'envoi de mail
publicStaticVoidMain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2008, 11h28   #15
Membre à l'essai
 
Inscription : avril 2008
Messages : 140
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 140
Points : 21
Points : 21
c'est pour avoir un envoi de mail dans ma boiteafin que je puisse voir les valeurs de var1 et var2,vérifier si c'est juste.
je l'ai déja utilisé plusieurs fois
sajodia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2008, 11h31   #16
Membre éprouvé
 
Homme
Ingénieur systèmes et réseaux
Inscription : août 2007
Messages : 508
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux

Informations forums :
Inscription : août 2007
Messages : 508
Points : 464
Points : 464
Citation:
Envoyé par sajodia Voir le message
voila ce que j'ai fait
!/bin/ksh
minute=`date +%M`
heure=`date +%H`
jour=`date +%d`
#mois=`date +%B`
#an=`date +%Y`
an=2007
mois=SEPTEMBRE
if [ -e /sextantapp/m1/fic/PH7/$an/$mois -a -e fichier d ]
then

var1= sed -r -e 's/ [0-9]\{2\}[A-Z][0-9]\{2\}\([0-9]\{8\}\).*/\1/p'
var2=
echo " datextrac: ${var1}" | mail -s "Information " siiiiiiiii@yahoo.fr
fi
mais j'ai rien à l'envoi de mail
Normal,
var1 et var2 sont vides. Sur quoi appliques-tu appliques ta cmd sed pour avoir la valeur de var1?
publicStaticVoidMain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/05/2008, 17h21   #17
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
Salut !

Teste toujours séparément :
Essaie ton sed à part (simplement sur ton terminal), et vérifie qu'il te renvoie ce que tu attends.
sed -n '1 s/.\{5\}\(.\{8\}\).*/\1/p' fichierd

Ensuite, ton problème vient au moins du fait que tu demandes la valeur d'une variable :

$(sed -n '1 s/.\{5\}\(.\{8\}\).*/\1/p' fichierd )

Essaie la mêle chose en enlevant le $
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2008, 09h16   #18
Membre à l'essai
 
Inscription : avril 2008
Messages : 140
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 140
Points : 21
Points : 21
Salut
j'ai testé étape par étape comme vous m'avez dit sur mon terminal mais à chaque fois i je n'ai rien.

je sais pas d'ou vient le problème .
sajodia est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h45.


 
 
 
 
Partenaires

Hébergement Web