Contenu | Rechercher | Menus

Annonce

DVD, clés USB et t-shirts Ubuntu-fr disponibles sur la boutique En Vente Libre

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 01/02/2021, à 15:48

bierzo

Générer fichier csv en shell

Bonjour à tous !

J'ai une question pour générer un fichier csv.

J'ai un répertoire qui contient des fichiers pdf ainsi que des fichiers eml. J'envoie par mail via les fichiers eml, en pièce jointe les pdf. Une fois ces mails envoyés, je voudrais générer un fichier csv qui contiendrait ces colonnes la:

1) ID: Chaque ligne contient le nom du fichier pdf
2) Status: Ok ou NOK si l'envoie du mail à bien eu lieu
3) Date de reception des fichiers pdf
4) Date d'envoie des fichiers via le mail

Savez-vous comment je peux générer mon fichier csv dans mon script shell avec les 4 colonnes ?

Merci beaucoup smile

Hors ligne

#2 Le 01/02/2021, à 16:15

erresse

Re : Générer fichier csv en shell

Bonjour,
Si c'est en vue de lire ton fichier csv dans un tableur comme Calc, par exemple, il te suffit de créer un fichier :

ID;Statut;Date de réception;Date d'envoi
truc;OK;12/01/21;15/01/21
...

Les séparateurs ";" vont générer les colonnes entre les données de manière automatique.
Par contre, si tu veux afficher ton fichier dans un éditeur de texte, plus basique, pourquoi vouloir faire un csv ? Il vaudrait mieux faire une mise en forme "en dur" dans le fichier et l'enregistrer tout formaté...

Dernière modification par erresse (Le 01/02/2021, à 16:18)


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#3 Le 01/02/2021, à 19:38

kamaris

Re : Générer fichier csv en shell

Ces infos (ID, status, etc.) elles se trouvent dans les fichiers eml ?
Ta question c'est de savoir comment extraire ces infos des fichiers eml pour les mettre dans un csv ?

Hors ligne

#4 Le 02/02/2021, à 10:21

bierzo

Re : Générer fichier csv en shell

Je préfère un csv, car par la suite je vais devoir l'utiliser dans un tableur directement. Et sur mon projet, c'est un des choix demandés.

Mais comment en shell, je peux générer ce csv ?

@kamaris, nan les infos ne sont pas le fichier eml.

Hors ligne

#5 Le 02/02/2021, à 11:58

erresse

Re : Générer fichier csv en shell

bierzo a écrit :

Mais comment en shell, je peux générer ce csv ?

Comme je te l'ai montré, en écrivant les données séparées par un ";", c'est tout...

echo "" > fichier_csv
echo "$v1;$v2;$v3;$v4" >> fichier_csv
...

Le fichier "fichier_csv" produit pourra être ouvert directement dans un tableur qui saura le mettre en forme.


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#6 Le 02/02/2021, à 12:58

Watael

Re : Générer fichier csv en shell

echo "" > fichier_csv est superflu.


Welcome to sHell. · eval is evil.

Hors ligne

#7 Le 02/02/2021, à 14:53

erresse

Re : Générer fichier csv en shell

Watael a écrit :

echo "" > fichier_csv est superflu.

Tu as raison, je sais bien que le fichier est créé s'il n'existe pas, même avec >>...
Mais donner juste la seconde ligne me semblait un peu trop simple. tongue


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#8 Le 02/02/2021, à 14:53

bierzo

Re : Générer fichier csv en shell

erresse a écrit :
bierzo a écrit :

Mais comment en shell, je peux générer ce csv ?

Comme je te l'ai montré, en écrivant les données séparées par un ";", c'est tout...

echo "" > fichier_csv
echo "$v1;$v2;$v3;$v4" >> fichier_csv
...

Le fichier "fichier_csv" produit pourra être ouvert directement dans un tableur qui saura le mettre en forme.


Ah oui exact. Et comment lui indiquer les noms de colonnes ? Car je souhaite avoir des noms de colonnes, et les variables serviront à indiquer le contenu des lignes.

Hors ligne

#9 Le 02/02/2021, à 15:08

erresse

Re : Générer fichier csv en shell

echo "ID;Statut;Date de réception;Date d'envoi" >> fichier_csv
echo "truc;OK;12/01/21;15/01/21" >> fichier_csv
echo "$ID;$Stat;$Dat_rec;$Dat_env" >> fichier_csv
...

Pas plus compliqué que ça... Tu écris une première ligne contenant le titre des colonnes, tout simplement.


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#10 Le 02/02/2021, à 15:21

bierzo

Re : Générer fichier csv en shell

erresse a écrit :
echo "ID;Statut;Date de réception;Date d'envoi" >> fichier_csv
echo "truc;OK;12/01/21;15/01/21" >> fichier_csv
echo "$ID;$Stat;$Dat_rec;$Dat_env" >> fichier_csv
...

Pas plus compliqué que ça... Tu écris une première ligne contenant le titre des colonnes, tout simplement.


Donc la première ligne, c'est le nom des colonnes, puis la deuxième ligne "echo "$ID;$Stat;$Dat_rec;$Dat_env" >> fichier_csv" contiendra es lignes c'est ça ?

Mais le fait de rediriger tout ça dans le même fichier, la deuxième ligne de code ne va pas écraser la première à savoir celle avec les noms de colonnes ?

Hors ligne

#11 Le 02/02/2021, à 16:01

erresse

Re : Générer fichier csv en shell

C'est la base du fonctionnement de la redirection de la sortie standard "stdout" dans un fichier texte (normalement, la sortie se fait sur l'écran de la console (ou terminal).
- Redirection initiale, avec écrasement / création du fichier sortie (un caractère ">" unique) :

echo "texte_à_écrire" > fichier_sortie

- Redirection additionnelle, ajout dans le fichier sortie, avec création éventuelle si le fichier n'existe pas (deux caractères ">>") :

echo "texte suivant à ecrire" >> fichier_sortie

As-tu un peu essayé de lire de la documentation sur le shell bash et les règles de base des commandes ?


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#12 Le 02/02/2021, à 16:27

MicP

Re : Générer fichier csv en shell

Mais ……Bretzel liquide !

Autant qu'il utilise une feuille de tableur pour saisir ses données
et qu'il sauvegarde ensuite sa feuille au format csv

Hors ligne

#13 Le 02/02/2021, à 17:05

Watael

Re : Générer fichier csv en shell

echo "ID;Statut;Date de réception;Date d'envoi" >> fichier_csv

ah ben non, là :

echo "ID;Statut;Date de réception;Date d'envoi" >fichier_csv

à moins de vouloir retrouver des en-têtes au milieu du fichier. tongue
smile


Welcome to sHell. · eval is evil.

Hors ligne

#14 Le 02/02/2021, à 20:44

kamaris

Re : Générer fichier csv en shell

MicP a écrit :

Mais ……Bretzel liquide !

Autant qu'il utilise une feuille de tableur pour saisir ses données
et qu'il sauvegarde ensuite sa feuille au format csv

Ben oui, d'où ma question plus haut : je ne vois pas trop non plus l'intérêt d'écrire un script s'il consiste essentiellement en des données saisies à la main et passées à echo.

Dernière modification par kamaris (Le 02/02/2021, à 20:44)

Hors ligne

#15 Le 02/02/2021, à 21:04

Watael

Re : Générer fichier csv en shell

il y a au moins trois données qui peuvent être récupérées automatiquement pendant l'exécution du script.
par contre, la date de réception, ce sera dans ses rêves.

Dernière modification par Watael (Le 02/02/2021, à 21:04)


Welcome to sHell. · eval is evil.

Hors ligne

#16 Le 03/02/2021, à 09:14

bierzo

Re : Générer fichier csv en shell

Je passe par un script pour générer mon csv car mon script ne fait pas uniquement que ça. Il fait des tas d'autres actions, et celle la en fait partie.

Ensuite, pour récupérer la date de réception, ne peut-on pas récupérer la date de création du fichier ? ça correspond à a même chose non ?

Hors ligne

#17 Le 03/02/2021, à 13:45

Watael

Re : Générer fichier csv en shell

tu peux pas savoir, au moment de l'expédition, quand le destinataire ouvrira son lecteur de mail, et donc recevra le mail.


Welcome to sHell. · eval is evil.

Hors ligne

#18 Le 03/02/2021, à 13:57

bierzo

Re : Générer fichier csv en shell

En fait le script est exécuté depuis le même serveur où se situent les fichiers. Donc pour ça que je disait de prendre la date de création.

Hors ligne

#19 Le 03/02/2021, à 15:09

erresse

Re : Générer fichier csv en shell

Watael a écrit :

tu peux pas savoir, au moment de l'expédition, quand le destinataire ouvrira son lecteur de mail, et donc recevra le mail.

Je pense que tu as mal compris : la date de réception n'est pas celle où le destinataire reçoit, mais celle où l'émetteur reçoit ce qu'il va envoyer ensuite.


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#20 Le 03/02/2021, à 15:25

Watael

Re : Générer fichier csv en shell

cette donnée n'est donc accessible qu'en interrogeant la machine sur laquelle "tourne" cet émetteur, ce qui, si on n'en est pas administrateur, ou utilisateur autorisé, n'est pas possible. Si ?


Welcome to sHell. · eval is evil.

Hors ligne

#21 Le 03/02/2021, à 16:00

erresse

Re : Générer fichier csv en shell

Là, je ne saurais répondre, j'ignore de quelle manière bierzo récupère les fichiers pdf qu'il veut ensuite envoyer par mail...
On peut toutefois supposer qu'il note comme date de réception, la date courante où il récupère son fichier, et comme date d'envoi celle où il l'expédie par mail au destinataire.
Cela dit, je pense qu'il a maintenant le moyen de produire un fichier log en format csv, ça ne doit pas poser de problème, et c'était bien le but de la demande.


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#22 Le 03/02/2021, à 17:11

Watael

Re : Générer fichier csv en shell

ahlala ! quiproquo !  j'ai lu sans réfléchir que Bierzo veux récupérer la date de réception après leur envoi.
je n'ai pas imaginé que les pdf pouvaient eux-mêmes avoir précédemment fait l'objet d'une réception. roll

donc, pas de problème : toutes les données peuvent être récupérées sur la machine locale.

NB: les données concernant les fichiers sont récupérées par stat; pas par ls !

Dernière modification par Watael (Le 03/02/2021, à 17:13)


Welcome to sHell. · eval is evil.

Hors ligne

#23 Le 22/02/2021, à 10:01

bierzo

Re : Générer fichier csv en shell

Bonjour à vous !

Désolé de revenir tard, mais je vous remercie beaucoup pour vos réponses et votre aide smile

Hors ligne