Valeur dans une variable -> la commande Unix ne fonctionne plus

Valeur dans une variable -> la commande Unix ne fonctionne plus - Shell/Batch - Programmation

Marsh Posté le 10-04-2020 à 12:07:41    

Bonjour,
 
#Je ne sais pas s'il vaut mieux mettre mon message dans la catégorie "Shell/Batch" ou "BI/Big Data".
 
Je suis coincé sur la variabilisation d'une valeur.
 
J'ai trouvé la manière de faire l'équivalent d'un find -mtime pour une recherche de fichiers sur Hahoop.
 
Si je fais la commande :
hdfs dfs -ls /chemin/*.tar.Z | awk '$6 > "2020-04-09"'
Cela me liste bien les fichiers reçus aujourd'hui (la commande indique : supérieure à la date d'hier, donc aujourd'hui).
 
Le $6 est la 6ème colonne rendue par la commande "hdfs dfs -ls", et correspondant à la date du fichier.
 
Mais si je mets la date en variable, ça ne fonctionne plus (pourtant bien avec les guillemets) :
date_hier=\"`date --date '1 days ago' +%Y-%m-%d`\"
echo $date_hier

 donne bien le résultat :
 "2020-04-09"
la commande :
hdfs dfs -ls /chemin/*.tar.Z | awk '$6 > $date_hier'
me liste alors tous les fichiers, sans les filtrer.
 
Pourriez-vous m'aider, svp ?
 
Merci !


Message édité par toto777 le 10-04-2020 à 14:18:29
Reply

Marsh Posté le 10-04-2020 à 12:07:41   

Reply

Marsh Posté le 10-04-2020 à 15:21:37    

Bonjour ! Passer des variables à AWK est un peu "touchy"
 
Tel quel, j'aurais tendance à utiliser le paramètre -v, ce qui donnerait un truc du genre :  
 
hdfs dfs -ls /chemin/*.tar.Z | awk -v var=$date_hier '$6 > var'
 
Il faudra peut-être un peu modifier (je n'ai pas de quoi tester facilement en ce moment), mais c'est une idée à creuser.
 
Bonne continuation !


---------------
On n'est jamais très fort pour ce calcul !
Reply

Marsh Posté le 10-04-2020 à 15:33:34    

Bonjour Farian,
 
En effet, bien vu, je venais à l'instant de trouver.
Et j'allais donc m'auto-répondre lol.
 
Merci beaucoup en tout cas.
 
Je vais juste répondre avec ce que j'avais prévu de rpéondre, si ça peut en aider certains.

Reply

Marsh Posté le 10-04-2020 à 15:42:37    

Comme l'a dit Farian, il faut en effet déclarer en tant que variable externe si on veut utiliser une variable dans awk, et l'utiliser sans le signe dollar ($) à l'intérieur du awk.
 
Il faut donc utiliser les commandes suivantes, et ça fonctionne ! :
 
date_hier=`date --date '1 days ago' +%Y-%m-%d`
hdfs dfs -ls /chemin*.tar.Z | awk -v date_hier_var=$date_hier '$6 > date_hier_var'

 
La variable $6 m'a trompé, je voulais utiliser la date de la même manière ^^.
 
Petite différence par rapport à mon message initial, il ne faut pas mettre de guillemets (" ) dans la valeur de la variable :
date_hier=`date --date '1 days ago' +%Y-%m-%d`
echo $date_hier

2020-04-09

Reply

Marsh Posté le 10-04-2020 à 15:43:22    

Je suis content d'avoir trouvé par moi-même juste avant de lire ta réponse, mais encore merci beaucoup Farian !

Reply

Marsh Posté le 10-04-2020 à 15:48:23    

De rien ! Ce n'est pas tous les jours qu'il y a un sujet sur awk :)
 
Edit : par rapport aux messages précédents, le $var dans awk peut être très utile, puisque cela permet de récupérer un champ de la ligne qui est parsée dont on ne connait pas la position a priori : si var vaut 1, $var vaut $1, ce qui permet, en fonction d'un éventuel calcul, de récupérer un champ ou un autre.
 
Mais bon, ce n'est pas tous les jours que l'on s'en sert !!!


Message édité par Farian le 10-04-2020 à 15:50:56

---------------
On n'est jamais très fort pour ce calcul !
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed