Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 roll dans un script  roll roll roll

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

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 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

Watael a écrit :

quel est le format des noms des logs ?
est-ce qu'il ne permet pas d'accéder directement au dernier log ?

ls roll dans un script  roll roll roll


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

Postmortem a écrit :

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

Tha Tawa'S a écrit :

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

Postmortem a écrit :

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

Tha Tawa'S a écrit :
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. big_smile


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

Watael a écrit :

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. big_smile

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

Tawal a écrit :

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

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

Watael a écrit :

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)...".

Watael a écrit :

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 ?! big_smile

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é :

Tha Tawa'S a écrit :

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

Watael a écrit :

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. smile

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 ! smile 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. big_smile


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

Watael a écrit :

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. smile

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 ! smile 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. big_smile

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. big_smile


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. big_smile

à demain. lol

Dernière modification par Watael (Le 14/05/2022, à 21:59)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne