#1 Le 11/05/2022, à 19:53
- Tha Tawa'S
Utiliser une variable la re-utiliser dans une autre variable
Hello les scripteurs Shell
Une question qui sera rapide a repondre pour vous :
je veux faire un script qui va chercher une expression reguliere dans pleins de fichiers de logs et qui me retournera la ligne qui va bien.
La problematique : Plein (Trop) de fichier de logs donc la recherche *.log est super longue.
donc je voudrais recuperer la sortie d'un "ls" pour avoir le fichier le plus recent et l envoyer en tant que variable dans une variable du type:
grep "expression recherchée" "fichier nommé"
Concretement voici ce que j ai commencé :
VAR1=$(ls -al *.log | tail -1)
VAR2=$(grep "expression" $VAR1)
Ou
VAR=$(grep "expression" `ls -al *.log | tail -1`)
Ca fonctionne pas, c est pour cela que j appelle votre aide !
Ouvrez les chakras et n'hesitez pas a porposer des solutions alternatives !!
Merci
Si tu tapes ta tete contre une cruche et que ca sonne creux... ce n est peut-etre pas la cruche qui est creuse....
Hors ligne
#2 Le 11/05/2022, à 20:19
- diesel
Re : Utiliser une variable la re-utiliser dans une autre variable
Ben..., moi, j'écrirais bien :
VAR1=$(ls -t *.log | head -1)
Après, tu risques d'avoir des soucis avec la VAR2. En effet, le grep peut te sortir un grand nombre de lignes.
Amicalement.
Jean-Marie
Dernière modification par diesel (Le 11/05/2022, à 20:24)
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#3 Le 11/05/2022, à 20:31
- Watael
Re : Utiliser une variable la re-utiliser dans une autre variable
quel est le format des noms des logs ?
est-ce qu'il ne permet pas d'accéder directement au dernier log ?
ls dans un script
Dernière modification par Watael (Le 11/05/2022, à 20:32)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#4 Le 12/05/2022, à 07:44
- Tha Tawa'S
Re : Utiliser une variable la re-utiliser dans une autre variable
Ben..., moi, j'écrirais bien :
VAR1=$(ls -t *.log | head -1)
Après, tu risques d'avoir des soucis avec la VAR2. En effet, le grep peut te sortir un grand nombre de lignes.
Amicalement.
Jean-Marie
C est pas tant ma commande qui pose probleme, car (ls -al *.log | tail -1) le resultat que j attend, alors que (ls -t *.log | head -1) me donne un autre fichier.
Le probleme est que le VAR1 n ets pas reprise dans VAR2
Si tu tapes ta tete contre une cruche et que ca sonne creux... ce n est peut-etre pas la cruche qui est creuse....
Hors ligne
#5 Le 12/05/2022, à 07:49
- Tha Tawa'S
Re : Utiliser une variable la re-utiliser dans une autre variable
quel est le format des noms des logs ?
est-ce qu'il ne permet pas d'accéder directement au dernier log ?ls dans un script
le format de mes fichiers log sont du type : hostname_AAAMMJJ_HHMMSS_{centiemes}.log
L'identification du fichier ne me pose pas probleme, c'est VAR1 n ets pas reprise dans VAR2 qui est le coeur de mon probleme
Si tu tapes ta tete contre une cruche et que ca sonne creux... ce n est peut-etre pas la cruche qui est creuse....
Hors ligne
#6 Le 12/05/2022, à 10:06
- Postmortem
Re : Utiliser une variable la re-utiliser dans une autre variable
Salut,
Si le nom de tes logs est bien hostname_AAAMMJJ_HHMMSS_{centiemes}.log, alors le fichier le plus récent est le dernier si on classe par ordre alphabétique.
Et du coup, on peut faire ça :
fics=( hostname_*_*_*.log )
var=$(grep "expression" "${fics[@]: -1}")
Edit :
Par rapport à ton premier message, « ls -al *.log | tail -1 » donne ça :
$ ls -al *.log | tail -1
-rw-rw---- 1 XXX XXX 5 mai 12 11:05 hostname_20220511_110331_6546456.log
Donc si tu récupères ça dans une variable et que tu fais « grep expression $var », c'est comme si tu faisais « grep "expression" -rw-rw---- 1 XXX XXX 5 mai 12 11:05 hostname_20220511_110331_6546456.log », donc forcément, ça marche pas très bien.
Dernière modification par Postmortem (Le 12/05/2022, à 10:38)
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#7 Le 12/05/2022, à 10:39
- Tha Tawa'S
Re : Utiliser une variable la re-utiliser dans une autre variable
Salut,
Si le nom de tes logs est bien hostname_AAAMMJJ_HHMMSS_{centiemes}.log, alors le fichier le plus récent est le dernier si on classe par ordre alphabétique.
Et du coup, on peut faire ça :fics=( hostname_*_*_*.log ) var=$(grep "expression" "${fics[@]: -1}")
Interessant, tu m'en dirais plus sur l'utilité de mettre [@]: -1} ?
et l'espace avant hostname ?
Dernière modification par Tha Tawa'S (Le 12/05/2022, à 10:41)
Si tu tapes ta tete contre une cruche et que ca sonne creux... ce n est peut-etre pas la cruche qui est creuse....
Hors ligne
#8 Le 12/05/2022, à 10:58
- Postmortem
Re : Utiliser une variable la re-utiliser dans une autre variable
Interessant, tu m'en dirais plus sur l'utilité de mettre [@]: -1} ?
et l'espace avant hostname ?
L'espace avant hostname n'est pas obligatoire.
fics=(*) : créé un tableau contenant le nom de tous les fichiers du répertoire ; c'est classé par ordre alphabétique.
Le premier élément est ${fics[0]}, le deuxième est ${fics[1]} etc...
${fics[@]}, c'est tous les éléments.
Tous les éléments à partir du troisième : ${fics[@]:2}
3 éléments à partir du deuxième : ${fics[@]:1:3}
Le dernier élément est ${fics[@]: -1} (espace obligatoire entre « : » et « -1 »)
Les 2 derniers éléments : ${fics[@]: -2}
L'avant dernier : ${fics[@]: -2:1}
Quelques exemples :
$ ls
fichier1 fichier2 fichier3 fichier4 fichier5
$ fics=(*)
$ echo "${fics[0]}"
fichier1
$ echo "${fics[1]}"
fichier2
$ echo "${fics[@]}"
fichier1 fichier2 fichier3 fichier4 fichier5
$ echo "${fics[@]:1:3}"
fichier2 fichier3 fichier4
$ echo "${fics[@]: -1}"
fichier5
$ echo "${fics[@]: -2}"
fichier4 fichier5
$ echo "${fics[@]: -2:1}"
fichier4
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#9 Le 12/05/2022, à 14:42
- Watael
Re : Utiliser une variable la re-utiliser dans une autre variable
L'espace avant hostname n'est pas obligatoire.
mais ça aère le code, et améliore sa lisibilité.
@Tha Tawa'S : pense à donner des noms évocateurs de ce qu'elles contiennent aux variables (lastLog, matchRgx...)
Dernière modification par Watael (Le 12/05/2022, à 17:12)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#10 Le 13/05/2022, à 20:52
- diesel
Re : Utiliser une variable la re-utiliser dans une autre variable
diesel a écrit :Ben..., moi, j'écrirais bien :
VAR1=$(ls -t *.log | head -1)
Après, tu risques d'avoir des soucis avec la VAR2. En effet, le grep peut te sortir un grand nombre de lignes.
Amicalement.
Jean-Marie
C est pas tant ma commande qui pose problème, car (ls -al *.log | tail -1) le résultat que j attend, alors que (ls -t *.log | head -1) me donne un autre fichier.
Le problème est que le VAR1 n'est pas reprise dans VAR2
Ben..., tu fais comme tu veux, mais je confirme, c'est bien "ls -t *.log | head -1" qui te donne le fichier qui a été modifié en dernier. Alors, que ça donne un résultat différent de ta commande, je n'en ai pas douté un seul instant mais ce n'est pas la question.
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#11 Le 14/05/2022, à 03:00
- Watael
Re : Utiliser une variable la re-utiliser dans une autre variable
eh, oui ! mais ce n'est pas parce que c'est le fichier log le plus récemment modifié, que c'est pour autant le fichier log le plus récent.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#12 Le 14/05/2022, à 06:50
- diesel
Re : Utiliser une variable la re-utiliser dans une autre variable
eh, oui ! mais ce n'est pas parce que c'est le fichier log le plus récemment modifié, que c'est pour autant le fichier log le plus récent.
Tu peux développer ?
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#13 Le 14/05/2022, à 07:36
- Tawal
Re : Utiliser une variable la re-utiliser dans une autre variable
Hello,
Je comprends le propos de Watael de la sorte :
- je crée un fichier fichier1
- puis, je crée 10min plus tard un autre fichier fichier2
- je modifie le fichier1
Le dernier fichier modifié est fichier1
Le fichier le plus récent est fichier2
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#14 Le 14/05/2022, à 12:19
- diesel
Re : Utiliser une variable la re-utiliser dans une autre variable
Hello,
Je comprends le propos de Watael de la sorte :
- je crée un fichier fichier1
- puis, je crée 10min plus tard un autre fichier fichier2
- je modifie le fichier1Le dernier fichier modifié est fichier1
Le fichier le plus récent est fichier2
Certes, mais dans le cas des logs, pour moi, le log le plus récent est celui dans lequel le système (ou l'application) a écrit en dernier.
Amicalement.
Jean-Marie
Dernière modification par diesel (Le 14/05/2022, à 12:19)
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#15 Le 14/05/2022, à 12:38
- Watael
Re : Utiliser une variable la re-utiliser dans une autre variable
est-ce des log systèmes* ?
ou bien, des logs de programme(s) (éventuellement le même avec des paramètres différents) exécuté(s) plusieurs fois, et dont les logs sont concaténés depuis leur première exécution... ?
--
*en général, ceux-ci sont numérotés, pas horodatés.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#16 Le 14/05/2022, à 13:25
- diesel
Re : Utiliser une variable la re-utiliser dans une autre variable
est-ce des log systèmes* ?
ou bien, des logs de programme(s) (éventuellement le même avec des paramètres différents) exécuté(s) plusieurs fois, et dont les logs sont concaténés depuis leur première exécution... ?--
*en général, ceux-ci sont numérotés, pas horodatés.
J'ai écrit : "...le système (ou l'application)...".
des logs de programme(s) (éventuellement le même avec des paramètres différents) exécuté(s) plusieurs fois, et dont les logs sont concaténés depuis leur première exécution... ?
Il n’empêche que, quelle que soit la manière, le fichier de log le plus récent reste quand-même celui dont la date de modification est la plus récente.
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#17 Le 14/05/2022, à 16:23
- Watael
Re : Utiliser une variable la re-utiliser dans une autre variable
« le système OU l'application »
j'ai répondu au second cas.
Il n’empêche que, quelle que soit la manière, le fichier de log le plus récent reste quand-même celui dont la date de modification est la plus récente.
plus récent, mais par rapport à quoi ?
ton critère est la modification.
On peut choisir l'accès, ou le changement, ou, comme Tha Tawa'S, la date inscrite dans le nom du fichier (± la date de création).
hein, est-ce qu'on peut ?!
Dernière modification par Watael (Le 14/05/2022, à 16:25)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#18 Le 14/05/2022, à 17:15
- diesel
Re : Utiliser une variable la re-utiliser dans une autre variable
Le 4 Juillet 1987, j'ai créé un fichier "fichier_du_20_12_2047" auquel je n'ai plus touché depuis et le 12 mai 2022, j'ai créé un fichier "fichier_du_21_07_1969" et que j'ai modifié aujourd'hui. Lequel est le plus récent ?
Et c'est Tha Tawa'S qui a demandé :
je voudrais récupérer la sortie d'un "ls" pour avoir le fichier le plus récent
Amicalement.
Jean-Marie
Dernière modification par diesel (Le 14/05/2022, à 17:20)
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#19 Le 14/05/2022, à 18:02
- Watael
Re : Utiliser une variable la re-utiliser dans une autre variable
plus récent, mais par rapport à quoi ?
ça marche avec tous les "plus".
plus ???, mais plus ??? que quoi ?
plus grand, mais plus grand que quoi ? un crayon ? la maison ?
plus beau, mais plus beau que quoi ? moi ? toi ?
plus fort, mais plus fort que quoi ? Hulk ? Superman ?
...
plus récent, mais par rapport à quoi ? [...]l'accès, ou le changement, ou, comme Tha Tawa'S, la date inscrite dans le nom du fichier (± la date de création).
"plus" est toujours relatif. Il n'y a pas de "plus" absolu.
il peut y avoir de l'implicite : « je veux être plus grand/fort/beau (que précédemment). »
Dernière modification par Watael (Le 14/05/2022, à 18:05)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#20 Le 14/05/2022, à 19:18
- diesel
Re : Utiliser une variable la re-utiliser dans une autre variable
Ben..., Tha Tawa'S a écrit que c'était plus récent à partir de la sortie d'un ls. Ça cadre un peu le problème.
Après, plus récent, c'est quand-même relatif à l'échelle du temps (et on ne parle pas, là, du temps en physique relativiste). Ainsi, un fichier créé aujourd'hui est forcement plus récent qu'un autre créé hier si on n"a pas modifié les fichiers entre temps.
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#21 Le 14/05/2022, à 20:26
- Watael
Re : Utiliser une variable la re-utiliser dans une autre variable
un ls, par défaut, affiche les fichiers dans l'ordre alphabétique : abc.log, def.log, zobi.log
alors, le plus récent (dans l'ordre d'affichage) sera le dernier : zobi.log.
Ainsi, un fichier créé aujourd'hui est forcement plus récent qu'un autre créé hier si on n"a pas modifié les fichiers entre temps.
tiens ?! tu viens de changer de critère ! il y a quelques messages tu ne considérais que seule la date de modification importait pour définir le fichier le plus récent.
là, on vient de passer à la date de création.
si on ne considère que la chronologie, il y a encore d'autres critères : accès et changement.
et, je ne parle pas de relativisme spacio-temporel; je dis "relatif", comme dans "concerne, implique ou constitue une relation".
d'ailleurs, la relativité générale n'intervient pas dans la distinction entre chemin relatif et absolu vers un fichier.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#22 Le 14/05/2022, à 21:06
- diesel
Re : Utiliser une variable la re-utiliser dans une autre variable
un ls, par défaut, affiche les fichiers dans l'ordre alphabétique : abc.log, def.log, zobi.log
alors, le plus récent (dans l'ordre d'affichage) sera le dernier : zobi.log.Ainsi, un fichier créé aujourd'hui est forcement plus récent qu'un autre créé hier si on n"a pas modifié les fichiers entre temps.
tiens ?! tu viens de changer de critère ! il y a quelques messages tu ne considérais que seule la date de modification importait pour définir le fichier le plus récent.
là, on vient de passer à la date de création.
si on ne considère que la chronologie, il y a encore d'autres critères : accès et changement.et, je ne parle pas de relativisme spacio-temporel; je dis "relatif", comme dans "concerne, implique ou constitue une relation".
d'ailleurs, la relativité générale n'intervient pas dans la distinction entre chemin relatif et absolu vers un fichier.
Vois pas bien le rapport entre les problèmes de dates et la notion de chemin relatif ou absolu à un fichier ; mais bon...
Je n'ai pas changé de notion concernant le tri des fichiers plus ou moins récents. Je t'ai juste donné un exemple indépendant du problème de logs de Tha Tawa'S.
Justement, pour en revenir aux fichiers de logs, le plus récent sera celui dans lequel un programme aura écrit en dernier. Dans ce cas, le log le plus récent est bien celui dont la date de modification est la plus récente.
Amicalement.
Jean-Marie
P.S. Je viens de voir passer un diptère avec des soucis de fondement.
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#23 Le 14/05/2022, à 21:41
- Watael
Re : Utiliser une variable la re-utiliser dans une autre variable
Vois pas bien le rapport entre les problèmes de dates et la notion de chemin relatif ou absolu à un fichier ; mais bon...
et on ne parle pas, là, du temps en physique relativiste
je t'explique le notion de relativité ("par rapport à quoi"), et à quoi s'oppose "absolu".
le plus récent sera celui dans lequel un programme aura écrit en dernier.
non. ça dépend de ce à quoi on compare sa "récenceté" : création, modification, accès, changement.
je te le redis, il n'y a pas de "plus récent" absolu, c'est toujours "plus récent" par rapport/relatif à un événement : création, modification, accès, changement.
ce que tu prends pour de l'absolu, c'est de l'implicite.
pour toi, "plus récent", c'est implicitement relatif à la modification, mais c'est une vision étriqué.
ouvre ton esprit aux merveilles des autres critères.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#24 Le 14/05/2022, à 21:48
- diesel
Re : Utiliser une variable la re-utiliser dans une autre variable
Ou c'est moi qui explique mal ce que je veux dire ou c'est toi qui a des difficultés à comprendre (ou les deux).
J'en ai assez pour ce soir.
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#25 Le 14/05/2022, à 21:55
- Watael
Re : Utiliser une variable la re-utiliser dans une autre variable
moi, j'explique bien, ET tu ne vois pas la forêt derrière ton arbre.
j'admets que l'un des critères de "récenceté" peut être la date de modification, et je dis très clairement qu'il y en a d'autres.
ne sois donc pas aussi binaire unaire.
à demain.
Dernière modification par Watael (Le 14/05/2022, à 21:59)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne