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 09/05/2020, à 23:35

ElricX

bash: boucle script bash avec arguments dans fichier excel??

Bonjour, je ne m'y connais pas du tout en bash mais je veux apprendre!

Voici mon besoin, j'ai un serveur discord sur les CCG (collectible card game). Je veux publier un message du type "card of the week". Ce message contient une analyze de carte.

Bon voilà, j'ai trouver un script bash qui permet de publier mon message sur discord (ref: https://chaoticweg.cc/discord.sh/) mais je dois passer plusieurs arguments à ce script.

Donc ce que je souhaite faire est d'exécuter ce script et de récupérer les valeurs des arguments dans un fichier excel (ou encore csv). Chaque colonne du fichier excel contient une valeur.

Cependant, j'aimerais qu'une fois que les valeurs d'une ligne sont utilisé. Que ceux-ci soit supprimé ou ignoré dans le fichier pour ne pas publier deux fois le même contenu.

Voici un exemple de la commande final que je dois lancer:
./discord.sh  --username "NotificationBot" --avatar "https://i.imgur.com/12jyR5Q.png" --text "Check out this embed!" --title "New Notification!" --description "This is a description\nPretty cool huh?" --color "0xFFFFFF" --url ttps://github.com/ChaoticWeg/discord.sh" --author "discord.sh v1.0" --author-url "https://github.com/ChaoticWeg/discord.sh" --author-icon "https://i.imgur.com/12jyR5Q.png" --image "https://i.imgur.com/12jyR5Q.png" --thumbnail https://i.imgur.com/12jyR5Q.png" --footer "discord.sh v1.0" --footer-icon "https://i.imgur.com/12jyR5Q.png" --timestamp

Merci pour votre aide!

Hors ligne

#2 Le 09/05/2020, à 23:58

kamaris

Re : bash: boucle script bash avec arguments dans fichier excel??

Si tu as un fichier csv dont chaque ligne contient les arguments à passer au script, tu peux par exemple, une fois extraite une ligne, la commenter avec un #.
Comme ça, à la prochaine invocation du script, on saura que la ligne d'arguments à passer au script est la première qui n'est pas commentée.

Pour extraire cette ligne et la passer au script :

sed -n '/^#/!{s/,/\n/g; p; q}' fichier.csv | xargs -d'\n' script.sh

Pour commenter ensuite la ligne extraite :

sed -i '/^#/!{s/.*/#&/; :loop; n; b loop}' fichier.csv

Dernière modification par kamaris (Le 10/05/2020, à 00:14)

Hors ligne

#3 Le 10/05/2020, à 00:00

Watael

Re : bash: boucle script bash avec arguments dans fichier excel??

https://chaoticweg.cc/discord.sh/ -> 404 page not found!

Edit: j'ajouterais un champs (publié), et vérifierais qu'il est vide pour sélectionner les lignes qui peuvent être publiées.

Dernière modification par Watael (Le 10/05/2020, à 00:03)


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

Hors ligne

#4 Le 10/05/2020, à 00:04

ElricX

Re : bash: boucle script bash avec arguments dans fichier excel??

Ca me semble relativement simple, je m'enlignais sur awk... Mais comme je n'y connais rien. Je vais prendre ta solution et tenter de la déchiffrer!  Merci, je vous reviens dès que j'ai le temps de tester tout ça!

Hors ligne

#5 Le 10/05/2020, à 00:15

kamaris

Re : bash: boucle script bash avec arguments dans fichier excel??

J'ai modifié un peu la commande d'extraction des arguments du script, car sinon, en utilisant directement la virgule comme séparateur dans xargs, il y a un saut de ligne résiduel à la fin…

Watael a écrit :

Edit: j'ajouterais un champs (publié), et vérifierais qu'il est vide pour sélectionner les lignes qui peuvent être publiées.

Oui, ce serait mieux : on s'appuie sur le format du fichier d'entrée, et on évite le cas pathologique où le premier argument du script commence par un #.

Dernière modification par kamaris (Le 10/05/2020, à 00:30)

Hors ligne

#6 Le 19/05/2020, à 22:29

ElricX

Re : bash: boucle script bash avec arguments dans fichier excel??

Bonjour, je viens d'essayer la commande:
sed -n '/^#/!{s/,/\n/g; p; q}' fichier.csv | xargs -d'\n' script.sh


Et j'obtiens ceci:
https://nxworld.club/index.php/s/tSKkdp … KH/preview

J'imagine que cela vient du fait que chaque arguments sont séparé par des ; Serait-il possible de les supprimer? En fait chaque argument doit avoir un espace entre un uniquement.

Merci encore pour votre aide!  Je viens de débuter la lecture du manuel de sed, ouf c'est du costaud. Mais semble très puissant effectivement.

Dernière modification par cqfd93 (Le 20/05/2020, à 09:01)

Hors ligne

#7 Le 19/05/2020, à 23:23

MicP

Re : bash: boucle script bash avec arguments dans fichier excel??

Bonjour

Alors, si dans le fichier cotw_full.csv les champs de chaque ligne sont séparés par un ;
et que tu veux que chaque ; soit remplacé par un caractère espace,
pour la première ligne trouvée qui ne commencera pas par un caractère #

essaye avec ça :

sed -n '/^#/!{s/;/ /g; p; q}'

Dernière modification par MicP (Le 19/05/2020, à 23:28)

Hors ligne

#8 Le 19/05/2020, à 23:35

kamaris

Re : bash: boucle script bash avec arguments dans fichier excel??

Oui, étant donné la tête du fichier d'entrée, il faut non seulement mettre un point virgule à la place de la virgule, mais aussi remplacer le séparateur \n par une espace.
Donc pour la commande globale, c'est :

sed -n '/^#/!{s/;/ /g; p; q}' fichier.csv | xargs script.sh

ou plus simplement :

sed -n '/^#/!{p; q}' fichier.csv | xargs -d';' script.sh

La commande pour commenter la ligne utilisée reste la même.

Dernière modification par kamaris (Le 19/05/2020, à 23:38)

Hors ligne

#9 Le 20/05/2020, à 02:03

ElricX

Re : bash: boucle script bash avec arguments dans fichier excel??

kamaris a écrit :

Oui, étant donné la tête du fichier d'entrée, il faut non seulement mettre un point virgule à la place de la virgule, mais aussi remplacer le séparateur \n par une espace.
Donc pour la commande globale, c'est :

sed -n '/^#/!{s/;/ /g; p; q}' fichier.csv | xargs script.sh

ou plus simplement :

sed -n '/^#/!{p; q}' fichier.csv | xargs -d';' script.sh

La commande pour commenter la ligne utilisée reste la même.


La première ligne fonctionne mais pas la 2ième, ca retourne:

https://nxworld.club/index.php/s/GP24S6 … ET/preview


Modération : merci d'utiliser des images de petite taille (300x300) ou des miniatures pointant sur ces images (Des hébergeurs comme Toile Libre ou TDCT'Pix le permettent).

Dernière modification par cqfd93 (Le 20/05/2020, à 09:02)

Hors ligne

#10 Le 20/05/2020, à 08:21

MicP

Re : bash: boucle script bash avec arguments dans fichier excel??

Bonjour ElricX

Comme tous ceux qui essayent de t'aider ici,
envoie-nous plutôt des copiés/collés dans lesquels on pourrait copier/coller le texte,
c'est très pénible d'être obligé d'agrandir l'image, de compter les caractères un à un,
et de recopier le texte sans faire de faute de frappe ou d'interprétation à partir d'une image.

Merci smile

=======
Il doit y avoir, dans ta ligne de commande, un caractère spécial qu'on ne peut pas voir
et qui bloque la commande xargs

=======
Je viens de refaire avec succès des essais
en utilisant la ligne de commandes proposée par kamaris :

michel@debT450:~/tstScr$ cat fichier.csv
#jh;htfgdgtrdhrg,.:;trjytj;grezrf;
#kjhkjh;kjhkjh;ezsgds;iou;432;$ĵkjhkjhkjjh
hydgrdh654;87hgfg;è-(hgfhg;kutryreyteyè-('-;hgf
jhhdhd;jythryt;hjttd;oiuoijl;hdegtrdsg
hgfdgfd;hgrdrdr;jytfrhytd;htgretrdgtre65465
michel@debT450:~/tstScr$ 
michel@debT450:~/tstScr$ sed -n '/^#/!{p; q}' fichier.csv | xargs -d';' 
hydgrdh654 87hgfg è-(hgfhg kutryreyteyè-('- hgf

michel@debT450:~/tstScr$ 

Dernière modification par MicP (Le 20/05/2020, à 09:32)

Hors ligne

#11 Le 20/05/2020, à 09:58

kamaris

Re : bash: boucle script bash avec arguments dans fichier excel??

@MicP : non, c'est le \n résiduel dont je parlais en #5 qui met la pagaille : j'ai refait exactement la même erreur roll

Donc ElricX, garde la première commande, ou bien on peut faire :

sed -Ez 's/(^|(#.*#)?[^\n]*\n)([^#][^\n]*)\n.*/\3/' fichier.csv | xargs -d';' script.sh

mais bon…

Hors ligne

#12 Le 20/05/2020, à 10:42

MicP

Re : bash: boucle script bash avec arguments dans fichier excel??

Il doit y avoir un malentendu,
je parlais des lignes de commandes que l'on voit dans l'image : https://nxworld.club/index.php/s/GP24S6 … ET/preview
et dans lesquelles il n'y a pas de \n

Hors ligne

#13 Le 20/05/2020, à 10:50

kamaris

Re : bash: boucle script bash avec arguments dans fichier excel??

Si, il y en a un, mais il n'apparait pas assez clairement si on ne fait pas intervenir xargs.
On ne peut malheureusement pas copier-coller le cas de test de ElricX, mais dans ton exemple en #10, on le voit :

$ sed -n '/^#/!{p; q}' fichier.csv | xargs -d';'
hydgrdh654 87hgfg è-(hgfhg kutryreyteyè-('- hgf

$ 

alors que

$ sed -Ez 's/(^|(#.*#)?[^\n]*\n)([^#][^\n]*)\n.*/\3/' fichier.csv | xargs -d';'
hydgrdh654 87hgfg è-(hgfhg kutryreyteyè-('- hgf
$ 

Si on ne met pas le xargs, ça donne :

$ sed -n '/^#/!{p; q}' fichier.csv
hydgrdh654;87hgfg;è-(hgfhg;kutryreyteyè-('-;hgf
$ sed -Ez 's/(^|(#.*#)?[^\n]*\n)([^#][^\n]*)\n.*/\3/' fichier.csv
hydgrdh654;87hgfg;è-(hgfhg;kutryreyteyè-('-;hgf$ 

Donc il y a bien un \n dans l'image de ElricX, que xargs conserve tel quel ensuite, dans son traitement.

Hors ligne

#14 Le 20/05/2020, à 12:27

MicP

Re : bash: boucle script bash avec arguments dans fichier excel??

Ok, je le cherchais sur la ligne de commande
alors qu'il était dans le retour de la commande smile

Hors ligne

#15 Le 20/05/2020, à 12:40

Watael

Re : bash: boucle script bash avec arguments dans fichier excel??

Donc il y a bien un \n dans l'image de ElricX

d'ailleurs, s'il pouvait arrêter de poster des images, et faire des copier-coller !...


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

Hors ligne

#16 Le 20/05/2020, à 12:57

MicP

Re : bash: boucle script bash avec arguments dans fichier excel??

Celle là a l'air de fonctionner :

./script.sh $(sed -n '/^#/!{s/;/ /gp;q}' fichier.csv)

Dernière modification par MicP (Le 20/05/2020, à 13:05)

Hors ligne

#17 Le 20/05/2020, à 13:38

kamaris

Re : bash: boucle script bash avec arguments dans fichier excel??

Oui, ça doit marcher aussi.
Par contre, à la réflexion, je pense qu'une commande en xargs -d';' ne pourra pas marcher, quel que soit le traitement fait du saut de ligne final, puisque les champs du fichier .csv sont de la forme "--opt arg".
Il faudrait qu'ils soient de la forme "-opt" puis "arg" pour que ça marche.

De toutes façons, tout ça c'est de la faute de ElricX qui poste des images au lieu de cas de test qu'on puisse copier-coller tongue

Hors ligne

#18 Le 20/05/2020, à 15:33

ElricX

Re : bash: boucle script bash avec arguments dans fichier excel??

Bon, désolé je croyais bien faire avec les captures d'écran.  Tout fonctionne avec les premières commandes suggéré. J'ai mis ca dans un cron job et ca fonctionne.  Va vraiment falloir que j'apprenne sed & awk....

Merci à vous! Vous êtes trop fort!

Hors ligne