BASH: extraire des lignes d'une catégorie souhaitée sans awk

Résolu/Fermé
envirironnementBash - Modifié le 18 juil. 2022 à 16:45
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 18 juil. 2022 à 16:54

Bonjour,

Je ne parviens pas à extraire, à partir du champ ‘categorie’, d’un fichier ‘livres.txt’ (présent dans mon répertoire personnel) les différents enregistrements correspondants à la catégorie de livres souhaitée par la personne.

À la fin de mon script, je dois créer un fichier dans lequel :

  • la première ligne contient la liste des auteurs (1ère et 2e colonnes) et titres de livres (3e colonne) de la catégorie (4e colonne) ;
  • les lignes suivantes indiquent le nom de l'auteur (1ère 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 la fin du script que j’essaie de terminer. Merci à ceux qui me corrigeront :

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"
A voir également:

1 réponse

mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
18 juil. 2022 à 16:54

Bonjour,

Peux-tu donner un (petit) fichier d'entrée en exemple et le résultat attendu ? En particulier je ne comprends pas pourquoi dans le fichier résultat les auteurs sont sur deux colonnes.

Est-ce que dans ton code il ne suffirait pas de rajouter un "if" dans la boucle "while" pour ignorer les lignes qui ne correspondent pas à la catégorie ?

Voici un exemple qui montre comment tu pourrais faire (je prends ici le fichier /etc/passwd qui suit les mêmes conventions) :

#!/bin/bash

IFS=":"
cat /etc/passwd | while read login auth uid gid description home shell  
do
   if [ "$shell" = "/bin/bash" ]
   then
       echo $login
   fi
done

Bonne chance

0