logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 18-07-2019 10:10:40

busan
Membre
Inscription : 03-06-2019

[Résolu]Paramètre entre parenthèse dans un script bash

Salut, je suis sur un petit projet qui consiste à importer des .Json, les convertir dans le bon format (_bulk) et les exporter vers la base de donné D'Elasticsearch, mais ça c'est pas le problème, j'aimerai pour les tests pouvoir indiquer dans un paramètre le nom de l'index (cf le code), seulement la syntaxe qu'il me retourne est:

{"index":{"_index":mon_paramètre,"_id":1}}


et moi je voudrais

{"index":{"_index":"mon_paramètre","_id":1}}


avé les doubles guillemets donc !

C'est sûrement rien du tout, mais ça bloque.scratchhead.gif

Allez merci.gif

El coda:

#! /bin/bash

nb_fichier=`find ./ -type f | wc -l`
while [[ $nb_fichier -ge '4' ]]
        do
                for fichier in `ls *| grep -v import_json.sh`
                        do
                                ((i++))
                                touch All.json
                                echo '{"index":{"_index":'$1',"_id":'$i'}}' >> 'All.json'
                                sed 's/,*$//g' $fichier > 'tmp.json'
                                paste -d '\n' 'tmp.json'  >> 'All.json'
                                mv $fichier trashbin/$fichier
                        done
                rm tmp.json
                echo "fusion done"
                sleep 100000
done

Dernière modification par busan (22-07-2019 09:46:26)


Amateur éclairé mais pas toujours une lumière, aide comme il peut et pose des questions bêtes.

Hors ligne

#2 18-07-2019 10:41:33

enicar
Membre
Lieu : pas ici
Distrib. : sid
Noyau : Linux 6.5.3
(G)UI : openbox
Inscription : 26-08-2010

Re : [Résolu]Paramètre entre parenthèse dans un script bash

Ce n'est pas très difficile, au lieu d'écrire « $1 » tu mets
« \"$1\" ».

Hors ligne

#3 18-07-2019 10:47:26

busan
Membre
Inscription : 03-06-2019

Re : [Résolu]Paramètre entre parenthèse dans un script bash

enicar a écrit :

Ce n'est pas très difficile, au lieu d'écrire « $1 » tu mets
« \"$1\" ».


Bah oui, évidement, maintenant je passe pour un idiot, merci roll

Non, sérieusement je n’avais pas pensé à échapper, cela m'avais échappé out.gif

Edit: j'ai parlé trop tôt:

{"index":{"_index":\"$1\","_id":13}}



J'ai ça à l'arrivé

Dernière modification par busan (18-07-2019 10:52:01)


Amateur éclairé mais pas toujours une lumière, aide comme il peut et pose des questions bêtes.

Hors ligne

#4 18-07-2019 10:51:18

enicar
Membre
Lieu : pas ici
Distrib. : sid
Noyau : Linux 6.5.3
(G)UI : openbox
Inscription : 26-08-2010

Re : [Résolu]Paramètre entre parenthèse dans un script bash

busan a écrit :

Bah oui, évidement, maintenant je passe pour un idiot, merci roll


Quand même pas, c'est juste que tu n'as pas l'habitude de bash.

Hors ligne

#5 18-07-2019 10:53:14

busan
Membre
Inscription : 03-06-2019

Re : [Résolu]Paramètre entre parenthèse dans un script bash

enicar a écrit :

busan a écrit :

Bah oui, évidement, maintenant je passe pour un idiot, merci roll


Quand même pas, c'est juste que tu n'as pas l'habitude de bash.




Bruh toujours tester avant de parler regarde mon édit plus haut smile

Dernière modification par busan (18-07-2019 10:53:32)


Amateur éclairé mais pas toujours une lumière, aide comme il peut et pose des questions bêtes.

Hors ligne

#6 18-07-2019 15:44:14

enicar
Membre
Lieu : pas ici
Distrib. : sid
Noyau : Linux 6.5.3
(G)UI : openbox
Inscription : 26-08-2010

Re : [Résolu]Paramètre entre parenthèse dans un script bash

Bon j'ai été trop optimiste moi aussi.
Donc à la place de « $1 » tu peux mettre « "\"$1\"" ».
Mais j'aurais probablement fais autrement. À la place de :


echo '{"index":{"_index":'"\"$1\""',"_id":'$i'}}' >> 'All.json'
 


J'aurais écrit


echo "{\"index\":{\"_index\":$1,\"_id\":$i}}" >> All.json
 


Mais bon l'important c'est que ça marche.

Hors ligne

#7 18-07-2019 15:55:38

busan
Membre
Inscription : 03-06-2019

Re : [Résolu]Paramètre entre parenthèse dans un script bash

Nope ça me retourne toujours la même syntaxe, un truc dans ce style là:

{"index":{"_index":test84445,"_id":1}}



et pas:

{"index":{"_index":"test84445","_id":1}}


Amateur éclairé mais pas toujours une lumière, aide comme il peut et pose des questions bêtes.

Hors ligne

#8 18-07-2019 16:06:39

enicar
Membre
Lieu : pas ici
Distrib. : sid
Noyau : Linux 6.5.3
(G)UI : openbox
Inscription : 26-08-2010

Re : [Résolu]Paramètre entre parenthèse dans un script bash

busan a écrit :

Nope ça me retourne toujours la même syntaxe, un truc dans ce style là:


essayes plutôt cela :


echo "{\"index\":{\"_index\":$1,\"_id\":$i}}" >> All.json
 


Ça devrait fonctionner.

Hors ligne

#9 18-07-2019 16:10:50

busan
Membre
Inscription : 03-06-2019

Re : [Résolu]Paramètre entre parenthèse dans un script bash

Raaah toujours pas, même problème, même output
j'ai vraiment copié collé ton code dans le mien
by the way je veux que l'output soit

{"index":{"_index":"test856897","_id":9}}


pas

{"index":{"_index":test856897,"_id":9}}



juste pour être claire

kernal_panic.gif

Dernière modification par busan (18-07-2019 16:14:04)


Amateur éclairé mais pas toujours une lumière, aide comme il peut et pose des questions bêtes.

Hors ligne

#10 18-07-2019 16:39:56

enicar
Membre
Lieu : pas ici
Distrib. : sid
Noyau : Linux 6.5.3
(G)UI : openbox
Inscription : 26-08-2010

Re : [Résolu]Paramètre entre parenthèse dans un script bash

busan a écrit :

Raaah toujours pas, même problème, même output
j'ai vraiment copié collé ton code dans le mien
by the way je veux que l'output soit

{"index":{"_index":"test856897","_id":9}}


pas

{"index":{"_index":test856897,"_id":9}}



juste pour être claire

https://debian-facile.org/img/smilies/x … _panic.gif


Non mais montre moi le script qui ne fonctionne pas en entier. Car je suspecte
un problème dans l'interface chaise-clavier big_smile

Hors ligne

#11 18-07-2019 16:56:29

Beta-Pictoris
Membre
Lieu : Angers
Distrib. : Buster
Inscription : 11-08-2015

Re : [Résolu]Paramètre entre parenthèse dans un script bash

Comme ceci ? :

echo "{\"index\":{\"_index\":\"$1\",\"_id\":$i}}"

Hors ligne

#12 18-07-2019 17:03:26

enicar
Membre
Lieu : pas ici
Distrib. : sid
Noyau : Linux 6.5.3
(G)UI : openbox
Inscription : 26-08-2010

Re : [Résolu]Paramètre entre parenthèse dans un script bash

Beta-Pictoris a écrit :

Comme ceci ? :

echo "{\"index\":{\"_index\":\"$1\",\"_id\":$i}}"


Ah voilà, c'est moi qui m'était trompé big_smile
De cette façon ça marchera wink

Hors ligne

#13 18-07-2019 17:25:34

Beta-Pictoris
Membre
Lieu : Angers
Distrib. : Buster
Inscription : 11-08-2015

Re : [Résolu]Paramètre entre parenthèse dans un script bash

Ou comme ceci :

echo '{"index":{"_index":"'$1'","_id":'$i'}}'



Ou comme cela :

printf '{"index":{"_index":"%s","_id":%s}}\n' $1 $i

Hors ligne

#14 18-07-2019 17:37:50

enicar
Membre
Lieu : pas ici
Distrib. : sid
Noyau : Linux 6.5.3
(G)UI : openbox
Inscription : 26-08-2010

Re : [Résolu]Paramètre entre parenthèse dans un script bash

Très bien le printf dans ce contexte, j'approuve à 100%.

Hors ligne

#15 18-07-2019 17:39:52

Beta-Pictoris
Membre
Lieu : Angers
Distrib. : Buster
Inscription : 11-08-2015

Re : [Résolu]Paramètre entre parenthèse dans un script bash

Tiens ? un amateur de C ? wink

Dernière modification par Beta-Pictoris (18-07-2019 17:40:47)

Hors ligne

#16 18-07-2019 18:05:14

enicar
Membre
Lieu : pas ici
Distrib. : sid
Noyau : Linux 6.5.3
(G)UI : openbox
Inscription : 26-08-2010

Re : [Résolu]Paramètre entre parenthèse dans un script bash

Beta-Pictoris a écrit :

iens ? un amateur de C ? wink


Je connais le C, mais ce n'est pas pour cela que je préfère l'utilisation
de printf dans ce cas. C'est plutôt la clarté apportée, plutôt que ce mélange
de chaîne protégée et non protégée.

Hors ligne

#17 19-07-2019 08:08:24

busan
Membre
Inscription : 03-06-2019

Re : [Résolu]Paramètre entre parenthèse dans un script bash

enicar a écrit :

Car je suspecte un problème dans l'interface chaise-clavier big_smile



Haha mon prof me disait ça aussi et il avait souvent raison. lol

Beta-Pictoris a écrit :

Ou comme ceci :

echo '{"index":{"_index":"'$1'","_id":'$i'}}'



il me semble que je l'ai déjà essayé celle là scratchhead.gif sans succès !

Beta-Pictoris a écrit :

Ou comme ceci :

echo '{"index":{"_index":"'$1'","_id":'$i'}}'



Effectivement c'est bon, merci !

Et pendant que je vous tiens, j'ai également besoin de retirer une virgule (systématiquement en fin de ligne),

j'ai essayé ça:

sed 's/ ,*$//g' mon_fichier > un_autre_fichier



et ça marchait au début, mais plus maintenant (alors que absolument rien n'a changé, bruh, bien évidemment)


Amateur éclairé mais pas toujours une lumière, aide comme il peut et pose des questions bêtes.

Hors ligne

#18 19-07-2019 18:05:59

Beta-Pictoris
Membre
Lieu : Angers
Distrib. : Buster
Inscription : 11-08-2015

Re : [Résolu]Paramètre entre parenthèse dans un script bash

Difficile de répondre. Peut-être qu'il n'y a plus d'espace avant la virgule dans ta regex.

Hors ligne

#19 19-07-2019 18:06:37

enicar
Membre
Lieu : pas ici
Distrib. : sid
Noyau : Linux 6.5.3
(G)UI : openbox
Inscription : 26-08-2010

Re : [Résolu]Paramètre entre parenthèse dans un script bash

busan a écrit :

Et pendant que je vous tiens, j'ai également besoin de retirer une virgule (systématiquement en fin de ligne),

j'ai essayé ça:


sed 's/ ,*$//g' mon_fichier > un_autre_fichier
 


et ça marchait au début, mais plus maintenant (alors que absolument rien n'a changé, bruh, bien évidemment)


D'abord, vu que c'est en fin de ligne le « g » est inutile car sed opére
par ligne. Ensuite il y un espace devant la virgule, c'est vraiment ce
que tu veux ?

Pour être clair, tu pourrais essayer :


sed -E 's/,+$//'
 


Èvidemment, si tu veux supprimer l'espace devant la virgule, mais qu'il
n'y en a pas toujours un, il faudrait utiliser :


sed -E 's/ ?,+$//'
 


Avec ton expression ça supprimait aussi un espace en fin de ligne,
et donc ça deviendrait


sed  's/ ?,*$//'
 

Hors ligne

#20 22-07-2019 09:45:44

busan
Membre
Inscription : 03-06-2019

Re : [Résolu]Paramètre entre parenthèse dans un script bash

Merci pour les infos, la virgule était une erreur, et il n'y a plus besoin de la supprimer. Sujet résolu pour moi.
merci.gif

Amateur éclairé mais pas toujours une lumière, aide comme il peut et pose des questions bêtes.

Hors ligne

Pied de page des forums