#1 Le 16/07/2022, à 22:18
- environnementBash
en BASH : extraire des lignes d'une catégorie souhaitée (sans awk)
Voici mon problème : je ne parviens pas à établir une liste qui reprend les auteurs et les titres des livres correspondant à une catégorie donnée (à partir d'un fichier livres.txt qui est déjà dans mon répertoire) En d’autres termes, je ne parviens pas à extraire, à partir du champ ‘categorie’, d’un fichier ‘livres’ les différents enregistrements correspondants à la catégorie de livres souhaitée par la personne.
Nom1:Prénom1:TITRE1:2000:BD
Nom2:Prénom2:TITRE2:2001:ROMAN
Nom3:Prénom3:TITRE3:2002:SCIENCES
Nom4:Prénom4:TITRE4:2003:BD
Nom5:Prénom5:TITRE5:2004:ROMAN
Nom6:Prénom6:TITRE6:2004:SCIENCES
À la fin de mon script, je dois créer un fichier dans lequel :
- la première ligne va m’indiquer la liste des auteurs (1re et 2e colonne) et titres de livres(3e colonne) de la catégorie (4e colonne)
- les lignes suivantes m’indiquent le nom de l'auteur(1re colonne) ainsi que le titre des livres de la catégorie sélectionnée(3e colonne) , séparés par un -
- la dernière ligne indique le nombre de livres trouvés
Voici, au complet, le script que j’essaie de terminer… :
#! /bin/bash
echo
echo "but : établir une liste qui reprend les auteurs et les titres des livres correspondant à une catégorie donnée"
fich="home/user/livres.txt"
chemin="home/user/livres.txt"
#vérifie que le fichier contenant la liste des livres existe bien
#vérifie si le chemin est fourni comme 1er arg à la cmd
if [ -z "$1" ]
then
echo "Utilisation $0 <livres.txt>"
echo "Aucun fichier input n'a été donné"
exit 1
fi
#verifie si ce meme fichier existe
if [ ! -f "$1" ]
then
echo "Le fichier $1 n existe pas"
exit 2
fi
#demander à l'utilisateur quelle catégorie de livres il souhaite extraire
read -p "Quelle catégorie souhaiteriez-vous extraire ?" cat
#extraire ces livres du fichier et créer un fichier avec : le titre, la liste des livres et ensuite le nombre de livres extraits
while read cat
do
if [[ -z $cat ]]
then
echo
echo "ligne contenant un tiret non traitée"
continue
fi
# Récupérer les données des différents champs
nom="$(echo "$cat" | cut -d";" -f1)"
prenom="$(echo "$cat" | cut -d";" -f2)"
titre="$(echo "$cat" | cut -d";" -f3)"
annee="$(echo "$cat" | cut -d";" -f4)"
categorie="$(echo "$cat" | cut -d";" -f5)"
# Compter le nombre de livres
#à faire
#créer le fichier reprenant titre liste de livres et nombres de livres extraits
IFSold="$IFS"
IFS=':'
while IFS=':' read nom prenom titre annee categorie
do
touch -p "/home/livres/$1"
"$cat" = "$1" && echo "correspondance \"$categorie\" : $nom $prenom $titre $annee"
done <"$chemin/$fichier"
done
Dernière modification par environnementBash (Le 16/07/2022, à 23:03)
Hors ligne
#2 Le 16/07/2022, à 22:39
- Watael
Re : en BASH : extraire des lignes d'une catégorie souhaitée (sans awk)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 16/07/2022, à 22:47
- MicP
Re : en BASH : extraire des lignes d'une catégorie souhaitée (sans awk)
Bonjour
…Et à la fin de mon script, je dois créer un nouveau fichier (nommé au choix) dans lequel : …
Ça sera beaucoup plus simple pour toi de nous donner le contenu du fichier que tu souhaites obtenir à partir du fichier d'exemple que tu as déjà donné
plutôt que d'essayer de décrire litérallement le contenu du fichier que tu voudrais obtenir
et ça sera beaucoup plus facile pour nous de comprendre ce que tu cherches à obtenir
Dernière modification par MicP (Le 16/07/2022, à 22:50)
Hors ligne
#4 Le 16/07/2022, à 23:27
- environnementBash
Re : en BASH : extraire des lignes d'une catégorie souhaitée (sans awk)
Malheureusement je n’ai pas le fichier livres.txt sur cet ordinateur car l’ancien sur lequel il se trouvait est HS…
Ce que je souhaite par exemple, c’est si la cat souhaitée est ‘ROMAN’ (à partir du read) alors j’obtiendrais ceci :
Pour la 1re ligne :
Nom2 Prénom2 TITRE2 2001 Nom5 Prénom5 TITRE5 2004
Pour la 2e ligne :
Nom2 TITRE2 - Nom5 TITRE5
Pour la 3e ligne :
2
Enfin, ces 3 lignes seront enregistrées dans un nouveau fichier (nom au choix).
En espérant que cela apporte de la clarté à mon explication car je suis perdu…
Hors ligne
#5 Le 16/07/2022, à 23:53
- Watael
Re : en BASH : extraire des lignes d'une catégorie souhaitée (sans awk)
pourquoi faire ça :
read -p "Quelle catégorie souhaiteriez-vous extraire ?" cat
while read cat #pourquoi redemander, en boucle, la catégorie ?
do
la partie "#Récupérer les les données des différents champs" ne fonctionnera pas.
et
"$cat" = "$1" &&
il manque la commande test :
test "$cat" = "$1" &&
Ne cherche pas à améliorer le code que tu nous présentes, ce serait comme reconstruire une cabane avec du bois pourri (désolé pour l'image).
Tu dois t'appliquer à décrire, en langage naturel, l'enchaînement logique des opérations élémentaires (un algorithme), qui permettront d'obtenir le résultat souhaité,
et ensuite, seulement après, écrire le code. La description servira de commentaires décrivant les opérations du script.
Dernière modification par Watael (Le 17/07/2022, à 00:00)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#6 Le 17/07/2022, à 00:10
- environnementBash
Re : en BASH : extraire des lignes d'une catégorie souhaitée (sans awk)
Merci pour les remarques pertinentes. Je vais essayer d'apporter une précision qui pourra peut-être éclaircir mon problème pour ce script.
J'ai bien entendu tenté d'écrire un algorithme avant de me lancer dans le code, seulement je ne sais pas quelle boucle conviendrait le mieux pour cette situation :
Par exemple, il se peut que (je cite des chiffres au hasard) chaque jour au-moins 500 personnes demande la liste de 'ROMAN', au-moins 200 personnes qui demandent 'BD' et au-moins 350 personnes qui demandent 'SCIENCES', où il faudra donc créer (toujours pour cet exemple) au-moins 1150 fichiers chaque jour. chaque fichier ayant un nom unique et spécifique à chaque personne ayant choisi une cat (meme si plusieurs on demandé la meme cat)... Et ainsi de suite pour les jour qui suivent.
J'espère avoir été précis dans cet exemple.
Dernière modification par environnementBash (Le 17/07/2022, à 00:12)
Hors ligne
#7 Le 17/07/2022, à 00:19
- jplemoine
Re : en BASH : extraire des lignes d'une catégorie souhaitée (sans awk)
Déjà : pourquoi vouloir passer par un script bash et des "fichiers à plat" ?
Tu importes ton fichier "livres" dans une base de données (Donc, faire une vraie analyse : EBU, MCD et tutti quanti).
Puis faire un "mini-logiciel" d’interrogation (web + php par exemple).
S'il faut vraiment des "fichiers à plat" pour les statistiques, il suffira de les faire générer par le "mini-logiciel".
Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.
Déconnecté jusqu’à nouvel ordre
Hors ligne
#8 Le 17/07/2022, à 00:25
- Watael
Re : en BASH : extraire des lignes d'une catégorie souhaitée (sans awk)
le script fonctionnera de la même manière quelle que soit le nombre d'exécutions.
l'unicité du fichier de sortie peut-être obtenue facilement avec mktemp.
il faudra nous en dire plus sur le mode d'interrogation du système : qui interroge la DB, et comment ce "qui" accède au système ?
mais d'abord, faire fonctionner le script.
montre-nous ton algorithme.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#9 Le 17/07/2022, à 00:36
- environnementBash
Re : en BASH : extraire des lignes d'une catégorie souhaitée (sans awk)
Déjà : pourquoi vouloir passer par un script bash et des "fichiers à plat" ?
Tu importes ton fichier "livres" dans une base de données (Donc, faire une vraie analyse : EBU, MCD et tutti quanti).
Puis faire un "mini-logiciel" d’interrogation (web + php par exemple).
S'il faut vraiment des "fichiers à plat" pour les statistiques, il suffira de les faire générer par le "mini-logiciel".
Honnêtement merci !
J'en prend bonne note de ces idées intéressantes qui me seront surement utiles pour les années qui viennent pour ma formation (je me forme depuis à peine un an et je verrai plus de choses l'année suivante...)
Le script dont il est question dans cette discussion est seulement un exercice que je ne suis pas parvenu à réaliser. Je suis obligé de passer par un script bash et des fichiers à plat, et sans utiliser awk ce qui me rend la tache compliquée depuis le début (lors de l'écriture de l'algo)
Hors ligne
#10 Le 17/07/2022, à 01:35
- MicP
Re : en BASH : extraire des lignes d'une catégorie souhaitée (sans awk)
Bonjour
… chaque jour au-moins 500 personnes demande la liste de 'ROMAN' …
chacune de ces 500 personnes sera mise dans la liste des personnes associées à l'unique demande nommée ROMAM
donc, elles vont demander une copie du seul fichier contenant la liste de 'ROMAN'
… au-moins 200 personnes qui demandent 'BD' …
chacune de ces 200 personnes sera mise dans la liste des personnes associées à l'unique demande nommée BD
donc, elles vont demander une copie du seul fichier contenant la liste de 'BD'
… et au-moins 350 personnes qui demandent 'SCIENCES', …
chacune de ces 350 personnes sera mise dans la liste des personnes associées à l'unique demande nommée SCIENCES
donc, elles vont demander une copie du seul fichier contenant la liste de 'SCIENCES'
Finalement il n'y aura que 3 fichiers résultants des 3 demandes
et il y aura 3 listes de personnes <=> une liste de personnes pour chacune des 3 demandes
ce qui fera 1050 personnes qui recevront chacune une copie d'un de ces 3 fichiers résultants de ces 3 demandes
donc, 1050 fichiers de type lien
Dernière modification par MicP (Le 17/07/2022, à 09:36)
Hors ligne
#11 Le 17/07/2022, à 17:39
- Ayral
Re : en BASH : extraire des lignes d'une catégorie souhaitée (sans awk)
Répondre à une question en renvoyant sur une discussion d'un forum extérieur, discussion où d'ailleurs les participants ne sont pas tout à fait d'accord, ce n'est pas une réponse pertinente pour la personne en quête d'informations.
Pour mettre les retours de commande entre deux balises code, les explications sont là : https://forum.ubuntu-fr.org/viewtopic.php?id=1614731
Blog d'un retraité
Site de graphisme du fiston Loïc
Ubuntu 22.04 LTS sur un Thinkpad W540
Hors ligne
#12 Le 17/07/2022, à 17:49
- Watael
Re : en BASH : extraire des lignes d'une catégorie souhaitée (sans awk)
ce n'est pas à environnementBash que je m'adressais mais aux aidants, afin qu'ils sachent ce qui a été déjà dit.
pas cordialement.
Dernière modification par Watael (Le 17/07/2022, à 20:24)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#13 Le 17/07/2022, à 20:12
- environnementBash
Re : en BASH : extraire des lignes d'une catégorie souhaitée (sans awk)
Bonjour
Dans son message #6, environnementBash a écrit :… chaque jour au-moins 500 personnes demande la liste de 'ROMAN' …
chacune de ces 500 personnes sera mise dans la liste des personnes associées à l'unique demande nommée ROMAM
donc, elles vont demander une copie du seul fichier contenant la liste de 'ROMAN'Dans son message #6, environnementBash a écrit :… au-moins 200 personnes qui demandent 'BD' …
chacune de ces 200 personnes sera mise dans la liste des personnes associées à l'unique demande nommée BD
donc, elles vont demander une copie du seul fichier contenant la liste de 'BD'Dans son message #6, environnementBash a écrit :… et au-moins 350 personnes qui demandent 'SCIENCES', …
chacune de ces 350 personnes sera mise dans la liste des personnes associées à l'unique demande nommée SCIENCES
donc, elles vont demander une copie du seul fichier contenant la liste de 'SCIENCES'Finalement il n'y aura que 3 fichiers résultants des 3 demandes
et il y aura 3 listes de personnes <=> une liste de personnes pour chacune des 3 demandes
ce qui fera 1050 personnes qui recevront chacune une copie d'un de ces 3 fichiers résultants de ces 3 demandes
donc, 1050 fichiers de type lien
Merci beaucoup pour ces précieuses informations. Cela m'a permis d'éclaircir ce que je n'avais pas compris. il ne me reste plus qu'à revoir mon algo (c'était là où j'avais freiné dans ma reflexion) pour revoir mon code.
Dernière modification par environnementBash (Le 17/07/2022, à 20:13)
Hors ligne
#14 Le 17/07/2022, à 20:42
- Watael
Re : en BASH : extraire des lignes d'une catégorie souhaitée (sans awk)
mais si des livres sont ajoutés entre le moment où la liste est créée et celui où une requête est émise, celle-ci ne fournira pas la liste exhaustive des livres d'une catégorie...
il faudra nous en dire plus sur le mode d'interrogation du système : qui interroge la DB, et comment ce "qui" accède au système ?
je me pose la question de la pertinence d'écrire le résultat dans un fichier. J'enverrais plutôt le résultat à less; libre à l'utilisateur de sauvegarder la liste s'il le souhaite (touche s dans less).
c'est demandé dans l'énoncé de l'exercice ?
on peut peut-être avoir l'énoncé.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#15 Le 17/07/2022, à 21:28
- environnementBash
Re : en BASH : extraire des lignes d'une catégorie souhaitée (sans awk)
Je n'ai malheureusement pas eu le temps de recopier toute la consigne le jour de la consultation de la copie car j'ai du écrire à la main sur papier une consigne qui était longue... Néanmoins, j'ai écris à partir de la moitié car le début expliquait simplement les champs, le contenu de livres.txt et que l'utilisateur devra dire quelle catégorie de livre il veut que le script extrait pour lui...
voici ce que j'ai (c'est une phrase qui fait 8 lignes car je devais écrire vite...) :
D’abord, je vérifie si livres.txt existe bel et bien dans mon rep personnel car juste après ça je dois demander à l'utilisateur quelle catégorie il veut extraire pour ensuite pouvoir réaliser l'extraction des livres qui correspondent à la catégorie choisie par la personne et puis je dois compter le nb de livres extraits, et à la fin je devrai être capable de créer un fichier où :
la 1re ligne renvoie une liste des auteurs et les titres de la catégorie x
les lignes qui suivent indiquera le nom ‘’ - ‘’le titre de la catégorie x
la dernière ligne indiquera le nb de livres (y)
pour afficher à l'écran le contenu du fichier que je viens de créé
J'aimerais également rebondir au sujet de la cmd less car c'est vrai que je n'y avais pas encore pensé... :
il s'agit bien d'une alternative à cat pour pouvoir visualiser le contenu d’un long fichier car elle possède une commande de pagination ? je demande cela car je ne vois pas comment l'utilisateur pourra sauver son fichier (ce n'est pas demandé dans la consigne en tout cas j'en suis sûr)
pour répondre à cette question :
il faudra nous en dire plus sur le mode d'interrogation du système : qui interroge la DB, et comment ce "qui" accède au système ?
il n'y avait rien qui parlait de cela dans la consigne. C'est juste un script en bash qui extrait les livres à partir d'un fichier à plat nommé livres.txt
Demain je reviendrai sur le forum et vous tiendrai au courant de mon avancée.
Dernière modification par environnementBash (Le 17/07/2022, à 21:42)
Hors ligne
#16 Le 17/07/2022, à 22:05
- MicP
Re : en BASH : extraire des lignes d'une catégorie souhaitée (sans awk)
Pour l'histoire des livres à retirer de la base de donnée des livres présents, il faudrait décider de quand faire appliquer la requête :
soit :
- quand la personne fait sa demande => réservation => suppression des livres réservés dans la base de données des livres puisqu'il n'y aura peut-être pas XX exemplaires du même livre
ou
- quand la personne vient effectivement retirer ses livres => suppression des livres réservés dans la base de données des livres puisqu'il n'y aura peut-être pas XX exemplaires du même livre
=======
Ça vaudrait le coup d'aller faire un tour à la BnF pour leur demander comment leur système gère ça
parce que c'est le cas de dire que dans ce domaine, ils doivent "en connaître un rayon", (et en plus, c'est super bien climatisé )
Mais bon, ça n'a peut-être rien à voir avec le sujet donné.
Dernière modification par MicP (Le 17/07/2022, à 22:07)
Hors ligne
#17 Le 17/07/2022, à 22:27
- Watael
Re : en BASH : extraire des lignes d'une catégorie souhaitée (sans awk)
retirer [des livres] de la base de donnée des livres présents
heu, mais il n'est pas question de ça. 8O
demander à l'utilisateur quelle catégorie il veut extraire pour ensuite pouvoir réaliser l'extraction des livres qui correspondent à la catégorie choisie
je crois qu'il est seulement question de sélectionner des données du fichier pour les afficher.
J'aimerais également rebondir au sujet de la cmd less car c'est vrai que je n'y avais pas encore pensé... :
il s'agit bien d'une alternative à cat pour pouvoir visualiser le contenu d’un long fichier car elle possède une commande de pagination ?
oui, less est un lecteur (pager).
je demande cela car je ne vois pas comment l'utilisateur pourra sauver son fichier (ce n'est pas demandé dans la consigne en tout cas j'en suis sûr)
comme je l'ai dit, dans less, utiliser la commande s.
tu peux essayer avec une page man (qui est ouverte avec less, par défaut)
par exemple :
man less
une fois la page ouverte, tu tapes s, et, en bas, apparaîtra log file: qui demande de renseigner le nom du fichier dans lequel sera enregistrée la page.
=======
Ça vaudrait le coup d'aller faire un tour à la BnF pour leur demander comment leur système gère ça
quand une recette te demande de mettre une pincée de sel, tu vas demander à un conducteur de pelleteuse comment elle fonctionne ?
Dernière modification par Watael (Le 17/07/2022, à 22:28)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#18 Le 17/07/2022, à 23:01
- environnementBash
Re : en BASH : extraire des lignes d'une catégorie souhaitée (sans awk)
Pour l'histoire des livres à retirer de la base de donnée des livres présents, il faudrait décider de quand faire appliquer la requête :
quand la personne fait sa demande.
Je devrai préciser que dans la consigne, on ne parle pas de 'réservation' ni d'un 'nb d'exemplaire de livres présents' même si cela aurait été très intéressant (j'y travaillerai sur ce raisonnement quand j'aurais terminé ce script demain)
Pour cette exercice car je dois simplement extraire des lignes/livres dont la catégorie correspond à ce qui a été demandé à l'utilisateur, pour ensuite créer un fichier et mettre ces données dedans (sans utiliser awk, ce qui m'a compliqué la tache)...
Mais bon, ça n'a peut-être rien à voir avec le sujet donné
Bien au contraire, je prends bonne note de votre commentaire car elle m'a beaucoup fait réfléchir. Je travaillerai sur ce genre de raisonnement quand je serai un peu plus à l'aise avec l'écriture de script en bash...
Par exemple, et ceci n'a rien à voir avec le problème que je pose dans cette discussion, je tenterai d'écrire un script pour permettre par exemple à un étudiant d'une université de recevoir un fichier PDF sur sa boite mail avoir de voir la liste des livres présents (selon la catégorie qu'il demandé dans le formulaire) dans la bibliothèque de son université afin de voir si il peut effectuer une 'reservation' et éventuellement voir le 'nb d'exemplaire' pour chaque livre correspondant à la catégorie qu'il a demandé;
Et de là, je me poserai la même question que vous, à savoir :
il faudrait décider de quand faire appliquer la requête :
soit :
- quand la personne fait sa demande => réservation => suppression des livres réservés dans la base de données des livres puisqu'il n'y aura peut-être pas XX exemplaires du même livre
ou
- quand la personne vient effectivement retirer ses livres => suppression des livres réservés dans la base de données des livres puisqu'il n'y aura peut-être pas XX exemplaires du même livre
mais d'abord je dois terminer mon script qui a l'air d'être beaucoup plus simple..
Hors ligne
#19 Le 17/07/2022, à 23:09
- environnementBash
Re : en BASH : extraire des lignes d'une catégorie souhaitée (sans awk)
demander à l'utilisateur quelle catégorie il veut extraire pour ensuite pouvoir réaliser l'extraction des livres qui correspondent à la catégorie choisie
je crois qu'il est seulement question de sélectionner des données du fichier pour les afficher.
C'est exactement ça.
J'aimerais également rebondir au sujet de la cmd less car c'est vrai que je n'y avais pas encore pensé... :
il s'agit bien d'une alternative à cat pour pouvoir visualiser le contenu d’un long fichier car elle possède une commande de pagination ?
oui, less est un lecteur (pager).
je demande cela car je ne vois pas comment l'utilisateur pourra sauver son fichier (ce n'est pas demandé dans la consigne en tout cas j'en suis sûr)
comme je l'ai dit, dans less, utiliser la commande s.
tu peux essayer avec une page man (qui est ouverte avec less, par défaut)
par exemple :man less
une fois la page ouverte, tu tapes s, et, en bas, apparaîtra log file: qui demande de renseigner le nom du fichier dans lequel sera enregistrée la page.
Merci beaucoup
Hors ligne
#20 Le 17/07/2022, à 23:13
- MicP
Re : en BASH : extraire des lignes d'une catégorie souhaitée (sans awk)
Oui, il faut surtout ne pas se laisser distraire, car on a vite fait de sortir du "cahier des charges" en s'imposant des contraintes absolument inutiles et très chronophages,
sans compter qu'au final, le travail fait ne correspondrait pas du tout à ce qui avait été demandé, ce qui donnerait un script inefficace et hors sujet.
Il faut penser à régulièrement aller relire le sujet quand une étape est franchie afin de ne pas risquer de se disperser
enfin … c'est ce que moi je dois faire pour ne pas me disperser, peut-être que d'autres n'ont pas ce défaut.
Dernière modification par MicP (Le 17/07/2022, à 23:14)
Hors ligne
#21 Le 18/07/2022, à 07:03
- jplemoine
Re : en BASH : extraire des lignes d'une catégorie souhaitée (sans awk)
Il faut penser à régulièrement aller relire le sujet quand une étape est franchie afin de ne pas risquer de se disperser
enfin … c'est ce que moi je dois faire pour ne pas me disperser, peut-être que d'autres n'ont pas ce défaut.
C'est souvent le problème quand les spécifications (ie la consigne de l'exercice) sont trop floues.
Il faut bien définir ce que l'on doit faire mais aussi ce que l'on ne doit pas faire (dans le cas d'un lotissement par exemple).
Et surtout il faut faire une analyse avant de se lancer dans le développement.
Dans le cas précis, on a une "pseudo base de données" (sous le forme d'un fichier d'entrée)
- On devra extraire xxxxx au moment de la demande
- On ne gérera pas la disponibilité de l'ouvrage (pas de gestion de stock)
Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.
Déconnecté jusqu’à nouvel ordre
Hors ligne
#22 Le 18/07/2022, à 18:06
- LeoMajor
Re : en BASH : extraire des lignes d'une catégorie souhaitée (sans awk)
salut,
..donc pas de awk, ni de sqlite3, ...
cat livres.csv
auteur:titre:année:catégorie
Hergé:Le Temple du Soleil:1949:BD
Enid Mary Blyton:Oui-Oui et Madame Ouistiti:1992:ENFANTS
Hubert Reeves:Poussières d'étoiles:1984:ROMANS
Hergé:Tintin au Tibet:1960:BD
je te conseille d'ajouter un index, ou une reférence genre uuidgen.
A remarquer, que les auteurs pourraient être sur une autre table.
printf '%d\n' "':"
58
facile avec libreoffice
unoconv -f ods --stdout -i FilterOptions=58,34,76,1,,1036,true,true livres.csv > livres.ods
guillemets facultatifs ( 34 "Hergé":"Le Temple du Soleil":"1949":"BD" )
attention, pas de ligne vide à la fin du fichier csv
pour trier, tu sélectionnes ta plage de données incluant aussi "auteur,..., catégorie", puis Libreoffice "/Données/trier"
Hors ligne
#23 Le 19/07/2022, à 10:12
- MicP
Re : en BASH : extraire des lignes d'une catégorie souhaitée (sans awk)
Bonjour
… je te conseille d'ajouter un index, ou une reférence genre uuidgen. …
Tant qu'à ajouter un index, autant utiliser l'ISBN 13
Recherchez, par exemple :
ISBN 13 : 9782203001138
ou/et
ISBN 13 : 9782203017146
ou/et
ISBN 13 : 9782203006461
=======
Mais je pense qu'on (je fais aussi partie de ce on) s'éloigne un peu du cadre du sujet :
… Le script dont il est question dans cette discussion est seulement un exercice que je ne suis pas parvenu à réaliser. …
Dernière modification par MicP (Le 22/07/2022, à 11:56)
Hors ligne
#24 Le 21/07/2022, à 20:20
- LeoMajor
Re : en BASH : extraire des lignes d'une catégorie souhaitée (sans awk)
pour s'amuser en vba/gambas3
cat /home/toto/livres.csv
id:auteur:titre:annee:categorie
3:Hergé:Tintin au Tibet:1960:BD
2:Enid Mary Blyton:Oui-Oui et la Carte au trésor:1999:ENFANTS
4:Hergé:Le Temple du Soleil:1949:BD
0:Enid Mary Blyton:Oui-Oui et Madame Ouistiti:1992:ENFANTS
1:Hubert Reeves:Poussières d'étoiles:1984:ROMANS
5:Enid Mary Blyton:Oui-Oui et la Poudre magique:1994:ENFANTS
cat csv.gbs
use "gb.util"
Public Sub Main()
SortCsv(User.Home &/ "livres.csv", "categorie", "annee")
SortCsv(User.Home &/ "livres.csv", "auteur", "titre")
End
Public Sub SortCsv(FileCsv As String, Key1 As String, Optional Key2 As String, Optional Key3 As String)
'Key1,Key2,Key3, Tri string. pas de float, integer
Dim table As New Collection[], g As Collection
Dim SortKey As New String[], iSortKey As New Integer[]
Dim c As CsvFile
c = CsvFile.Open(FileCsv, ":")
While Not c.Eof
table.Add(c.Read())
Wend
Print "fields:", c.Fields.Join(",")
Print "count:", table.count
print "sortBy", Key1, Key2, Key3
For i As Integer = 0 To table.max
g = table[i]
SortKey.Add(g[Key1] & g[Key2] & g[Key3] & Chr(26) & CStr(i))
Next
SortKey = SortKey.Sort()
For i As Integer = 0 To SortKey.Max
iSortKey.Add(CInt(Split(SortKey[i], Chr$(26))[1]))
Next
Dim Ntable As New Collection[]
For i As Integer = 0 To iSortKey.max
g = table[iSortKey[i]]
'For Each item As Variant In g
' Print g.key, ":", item
'Next
Ntable.Add(table[iSortKey[i]])
Next
Print "\ncheck\n"
For i As Integer = 0 To Ntable.max
For Each item As Variant In Ntable[i]
Print Ntable[i].key, item
Next
Print
Next
End
gbs3 csv.gbs
retourne
~/scripts$ gbs3 csv.gbs
fields: id,auteur,titre,annee,categorie
count: 6
sortBy categorie annee
check
id 4
auteur Hergé
titre Le Temple du Soleil
annee 1949
categorie BD
id 3
auteur Hergé
titre Tintin au Tibet
annee 1960
categorie BD
id 0
auteur Enid Mary Blyton
titre Oui-Oui et Madame Ouistiti
annee 1992
categorie ENFANTS
id 5
auteur Enid Mary Blyton
titre Oui-Oui et la Poudre magique
annee 1994
categorie ENFANTS
id 2
auteur Enid Mary Blyton
titre Oui-Oui et la Carte au trésor
annee 1999
categorie ENFANTS
id 1
auteur Hubert Reeves
titre Poussières d'étoiles
annee 1984
categorie ROMANS
fields: id,auteur,titre,annee,categorie
count: 6
sortBy auteur titre
check
id 0
auteur Enid Mary Blyton
titre Oui-Oui et Madame Ouistiti
annee 1992
categorie ENFANTS
id 2
auteur Enid Mary Blyton
titre Oui-Oui et la Carte au trésor
annee 1999
categorie ENFANTS
id 5
auteur Enid Mary Blyton
titre Oui-Oui et la Poudre magique
annee 1994
categorie ENFANTS
id 4
auteur Hergé
titre Le Temple du Soleil
annee 1949
categorie BD
id 3
auteur Hergé
titre Tintin au Tibet
annee 1960
categorie BD
id 1
auteur Hubert Reeves
titre Poussières d'étoiles
annee 1984
categorie ROMANS
Hors ligne
#25 Le 21/07/2022, à 20:26
- Watael
Re : en BASH : extraire des lignes d'une catégorie souhaitée (sans awk)
environnementBash n'a déjà pas le droit d'utiliser awk...
en plus, il est interminable ce script gambas !
en bash, ça ne doit pas prendre plus d'une vingtaine de lignes.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne