obtenir la date -1 (reconvertit en probleme de awk ;) ) [shell] - Shell/Batch - Programmation
Marsh Posté le 31-03-2003 à 19:19:03
Doum a écrit : Je dois faire un script shell qui retrouve dans un fichier log les lignes du jour precedent.Et je n'arrive pas a calculer a partir de la date du jour (date) la date du jour precedent. |
Le plus simple a mon avis est de passer par un programme externe, parce que faire ca en shell ca doit etre galere
tu peux par exemple le faire en Java en utilisant la classe Date, enfin je dis ça, parce que j'ai dejà pratiquer et que ça se fait super facilement, mais parès ptet que ca se fait aussi en C ...
Marsh Posté le 31-03-2003 à 19:48:26
Allez, tiens, je sais pas si ça peut t'aider, mais bon, ça me coutait vraiment rien :
Code :
|
J'ai supposé que ta date était au format court (du genre 31/03/2003), mais ça marche aussi avec un format un peu plus long, il suffit de remplacer le SHORT par MEDIUM voire LONG.
Marsh Posté le 01-04-2003 à 10:12:00
Merci, mais probleme, je peux pas utilisé de java donc faut que je le passe en C, y'a t il un equivalent en C de la fonction:
Code :
|
Parceque je peux obtenir la date du jour facilement mais pour soustraire un jour
Marsh Posté le 01-04-2003 à 15:13:05
Bon nouveau gros probleme.J'ai fais la meme chose que toi mais en C:
Code :
|
Par contre impossible de recuperer la valeur...
Comment l'utiliser dans un grep par exemple?
Marsh Posté le 01-04-2003 à 15:21:37
En fait je redirige la sortie standard de mon prog dans un fichier...le fichier contient donc la valeur de la date d'hier.
Comment utiliser cette valeur contenue dans le fichier avec un grep? Je vois pas.
EDIT: pour que vous situiez mieux l'affaire, j'aurai besoin de faire ca:
cat <unfichier> | grep "contenu d'un autre fichier"
comment obtenir le contenu de cet autre fichier?
Marsh Posté le 01-04-2003 à 16:05:21
et pourquoi tu stocke le resultat dans un fichier ?
moi je verrai plutot :
grep 'dateMoinsUn ${taDate}' "contenu d'un autre fichier"
sinon, si tu veux vraiment passer par un fichier
grep 'cat <unfichier>' "contenu d'un autre fichier"
enfin un truc du genre quoi
Marsh Posté le 01-04-2003 à 16:13:30
bobuse a écrit : |
Je stocke le resultat dans un fichier parceque j'arrive pas a faire un return dans le programme C, je fais donc un printf que je redirige dans un fichier.
Ensuite le grep 'cat <unfichier>' "contenu d'un autre fichier"
ne marche pas. Apparement le grep ne peut pas executer le cat...
Sinon j'ai pas compris ta premiere proposition
Marsh Posté le 01-04-2003 à 16:19:23
le return du main en C, c'est pour les codes d'erreur, hein ?
si tu fais printf("%s",taDate) a la fin de prog, et ben ca te retourne la valeur voulue
donc en faisant :
grep `dateMoinsUn ${taDate}` "contenu d'un autre fichier"
le shell va d'abord evaluer la chaine entre `` (je m'etait trompe de quote dans mes posts ), donc il fera :
grep ${taNouvelleDate} tonFichier
Marsh Posté le 01-04-2003 à 16:26:01
bobuse a écrit : |
Marsh Posté le 01-04-2003 à 16:36:48
heu je vois pas le pb :
voila ce que j'ai fait :
copier-coller de ton source C (qui n'a pas l'air de fiare ce que tu veux, mais bon, je suppose que tu y travaille ) :
Code :
|
et apres j'ai créé un fichier test.txt qui contient la ligne :
31.03.2003 truc
et puis :
|
Marsh Posté le 01-04-2003 à 16:44:04
attends on s'est pas compris je crois
Mon prog il te dis la date d'hier...par rapport a la date systeme.
Ensuite il l'affiche.
Alors ce que je fais c'est:
tmp=`datehier`
echo $tmp
31.03.03 donc jusque la tout va bien.
Ensuite faut que j'utilise cette date dans un grep
En gros grep $tmp "fichier"
Mais ca marche pas...
Marsh Posté le 01-04-2003 à 16:47:04
Doum a écrit : attends on s'est pas compris je crois |
Ha ok Ca roule !
mais pour le grep, je vois pas, chez moi ca marche tres bien !!
Marsh Posté le 01-04-2003 à 16:49:27
Moi le grep ne marche pas...et je comprends pas pourquoi...
Marsh Posté le 01-04-2003 à 16:52:50
Ha ok, dans le shell, ca marche, mais en SH, ca marche po
en fait le grep cherche a interpreter une regexp !
Ben faut passer la variable dans un sed pour mettre des meta-caracteres je pense
Marsh Posté le 01-04-2003 à 16:57:36
mais sans passer par une variable ca marche nickel :
#!/bin/sh |
Marsh Posté le 01-04-2003 à 16:58:14
bobuse a écrit : Ha ok, dans le shell, ca marche, mais en SH, ca marche po |
Pas bete le coup des regexp...par contre je passe comment dans un sed?
Marsh Posté le 01-04-2003 à 17:00:17
bobuse a écrit : mais sans passer par une variable ca marche nickel :
|
Non pas chez moi malheureusement
Marsh Posté le 01-04-2003 à 17:06:06
attends, a force de torturer mon script, je suis arrivé a :
#!/bin/sh |
et ca marche !
Je sais meme plus ce que j'ai changé !
EDIT : ha ok un espace dans truc=`./a.out` apres le '='
Marsh Posté le 01-04-2003 à 17:10:27
J'ai fait la meme chose que toi:
script:
|
et ca donne ca:
xxx$test.sh
31.03.2003
test.sh[3]: datehier: introuvable.
Obligé de faire CTRL+C derriere
Marsh Posté le 01-04-2003 à 17:14:01
Doum a écrit : J'ai fait la meme chose que toi:
|
heu ca marche $(variable) ( avec des parentheses), moi, j'utilise que des accolades {}
Marsh Posté le 01-04-2003 à 17:16:40
bobuse a écrit : |
Si j'ai compris ta phrase, parceque j'en suis pas sur , j'ai remplacé les parentheses par des accolades et ca marche tjs pas.
${variable} au lieu de $(variable) ?
Marsh Posté le 01-04-2003 à 17:20:13
Je sais pas si ca peut t'aider mais si en dehors du script je fais:
echo $tmp -> ca affiche bien 31.03.03
${tmp} -> ksh: 31.03.2003: introuvable.
$(tmp) -> ksh: tmp: introuvable.
Marsh Posté le 01-04-2003 à 17:25:07
rajoute un "set +x" au debut de ton script .... mais bon, la je commence a desesperer ...
Marsh Posté le 01-04-2003 à 17:27:25
Putain le bug, en gros le fichier que je dois analyser c'est un log de sauvegarde de fichier...y'a donc un bon paquet de ligne qui commencent toutes par la date (actuellement du 25.03.03 au 31.03.03).
Le but est que le grep garde que celle du 31.03.03
Ca marche pas.
Par contre si je fais ca:
grep -v ${datehier} $TSMCLI/dsmsched.log
La il m'affiche toutes les lignes du log, y compris celles qui contiennent le 31.03.03
Marsh Posté le 01-04-2003 à 17:31:01
bobuse a écrit : rajoute un "set +x" au debut de ton script .... mais bon, la je commence a desesperer ... |
Si je mets set +x (je sais pas pourquoi mais si tu le dis)
il m'affiche tout le fichier log mais sans "trier" les bonnes lignes
Marsh Posté le 01-04-2003 à 17:33:56
Doum a écrit : |
Le set +x sert a afficher ce que le shell interprete
Marsh Posté le 01-04-2003 à 17:34:49
bobuse a écrit : |
Ben donc il interprete tout mais mal
Marsh Posté le 01-04-2003 à 17:37:34
ReplyMarsh Posté le 01-04-2003 à 17:38:14
bobuse a écrit : |
Nonnnnnnnnnnnnnnnnnnnnnnnnnnnnnn au secours
merci quand meme, tu m'as bien aidé
Marsh Posté le 02-04-2003 à 09:28:33
Bizarre : j'ai essayé, et je vois pas pourquoi ca fonctionnerait pas.
Code :
|
Ca me sort les bonnes lignes. J'utilise ksh.
Juste pour info, si mes souvenirs sont bons :
-> Les parenthèses servent à l'exécution d'une commande, comme `` (il doit y'avoir une différence, je crois que ca n'est pas strictement équivalent). Donc $(ls -l /usr) ca équivaut à `ls -l /usr`
-> Les accolades servent juste à isoler le nom de la variable pour plus de lisibilité, ou pour résoudre des ambiguités :
date=`date +%d%m%y`
date_rep2=020303
ex : ls -l /rep1/${date}_rep2/rep3 <= permet de dire que c'est bien la variable $date que tu veux utiliser.
Marsh Posté le 02-04-2003 à 09:39:24
KSauzeRK a écrit : Bizarre : j'ai essayé, et je vois pas pourquoi ca fonctionnerait pas.
|
En fait je pense qu'on a un soucis au niveau de la re a recherché...dans la ligne du grep...
parceque si je tape:
grep -i traités <le fichier> ca marche
si je tape:
grep -i $datehier <le fichier> ca marche pas (j'ai essayé pas mal de possibilité pour la syntaxe du $datehier mais j'ai pas trouvé...je rappelle qu'on cherche par rapport au contenu de la variable datehier...
Marsh Posté le 02-04-2003 à 09:47:33
C'est bon je crois que je suis juste un gros connard
Je compare 2 truc different forcement il trouve rien
Marsh Posté le 02-04-2003 à 12:15:57
Now je veux faire ca:
# LIGNEDEBUT contient le numero de la premiere ligne a afficher |
Et ca marche pas, il me dit:
awk : 0602-562 Zone $() incorrecte. |
Une idée...?
Marsh Posté le 31-03-2003 à 18:10:17
Je dois faire un script shell qui retrouve dans un fichier log les lignes du jour precedent.Et je n'arrive pas a calculer a partir de la date du jour (date) la date du jour precedent.
Probleme de passage entre 2 mois/ entre 2 années (bissextile ou pas).
Sous Unix...
D'avance merci pour les pistes...
Message édité par doum le 02-04-2003 à 12:13:26