Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1646 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [Bash] choisir une ligne d'un fichier avec une boucle select

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Bash] choisir une ligne d'un fichier avec une boucle select

n°1544521
petitomme
Posté le 18-04-2007 à 18:09:54  profilanswer
 

Bonjour à tous,
je ne pense pas que mon titre soit très explicite mais c'est ce que j'ai trouvé de mieux, alors je m'en excuse.
Je cherche, pour un script bash, à proposer à l'utilisateur de choisir une ligne d'un fichier, pour cela je pense utiliser une structure select, cependant je n'arrive pas à énumérer le fichier ligne à ligne :
par exemple, j'ai essayé select variable in `cat fichier` ; ...
dans ce cas là, j'ai en 1) le premier mot , en 2) le second mot ...
 
j'ai aussi cherché en faisant :
select variable in `while read ligne ; do echo "$ligne" ; done <a `; do...
"while read ligne ; do echo "$ligne" ; done <a"  affiche le fichier ligne à ligne
mais rebelote, ça ne marche pas comme je veux, ça affiche mot à mot
 
Le but est de demander à l'utilisateur la ligne à supprimer dans un fichier, l'avantage du select est de ne pas avoir à retaper toute la ligne ce qui évite des fautes de frappe et autres.
 
Est-ce que vous auriez une idée de la manière de procéder, ou des autres pistes pour arriver au même résultat ?
 
Merci de m'avoir lu et de votre aide

mood
Publicité
Posté le 18-04-2007 à 18:09:54  profilanswer
 

n°1545567
Sve@r
Posté le 20-04-2007 à 10:45:18  profilanswer
 

petitomme a écrit :

Bonjour à tous,
je ne pense pas que mon titre soit très explicite mais c'est ce que j'ai trouvé de mieux, alors je m'en excuse.
Je cherche, pour un script bash, à proposer à l'utilisateur de choisir une ligne d'un fichier, pour cela je pense utiliser une structure select, cependant je n'arrive pas à énumérer le fichier ligne à ligne :
par exemple, j'ai essayé select variable in `cat fichier` ; ...
dans ce cas là, j'ai en 1) le premier mot , en 2) le second mot ...
 
j'ai aussi cherché en faisant :
select variable in `while read ligne ; do echo "$ligne" ; done <a `; do...
"while read ligne ; do echo "$ligne" ; done <a"  affiche le fichier ligne à ligne
mais rebelote, ça ne marche pas comme je veux, ça affiche mot à mot
 
Le but est de demander à l'utilisateur la ligne à supprimer dans un fichier, l'avantage du select est de ne pas avoir à retaper toute la ligne ce qui évite des fautes de frappe et autres.
 
Est-ce que vous auriez une idée de la manière de procéder, ou des autres pistes pour arriver au même résultat ?
 
Merci de m'avoir lu et de votre aide


 
Hello !!!
Bon, ton problème est parfaitement explicite. L'ennui c'est que la boucle "select" travaille en effet mot à mot. C'est son principe et on y peut rien (comme la boucle "for" ).
Mais tu peux arriver à gruger, par exemple, si tu veux proposer 3 phrases en choix, tu peux faire
select var in "phrase 1" "phrase 2" "phrase 3" (avec des guillemets pour grouper les mots de chaque phrase)
 
Donc l'idée, c'est d'arriver à créer un truc qui t'affiche ton fichier ligne par ligne, mais en y rajoutant des guillemets. Normallement , ceci devrait marcher
 
select variable in `while read ligne ; do echo "\"$ligne\"" ; done <a `
do
...
done
 
En fait, tu y étais presque avec ta 2° solution. Il te manquait juste les guillemets en début et fin de ligne...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1545805
petitomme
Posté le 20-04-2007 à 15:09:09  profilanswer
 

Ok merci beaucoup de ton aide,
En fait j'ai rusé autrement (je devais faire ce script pour aujourd'hui) : vu qu'il s'agissait d'un fichier de configuration qui était rempli par ce même script, j'ai séparé les mots de chaque ligne par ":" plutôt qu'un espace.
C'est un peu brouillon quand on affiche les lignes mais ça m'a permis de finir à temps.

n°1545872
Sve@r
Posté le 20-04-2007 à 17:03:11  profilanswer
 

petitomme a écrit :

Ok merci beaucoup de ton aide,
En fait j'ai rusé autrement (je devais faire ce script pour aujourd'hui) : vu qu'il s'agissait d'un fichier de configuration qui était rempli par ce même script, j'ai séparé les mots de chaque ligne par ":" plutôt qu'un espace.
C'est un peu brouillon quand on affiche les lignes mais ça m'a permis de finir à temps.


 
Surtout que ma solution proposée ce matin ne fonctionne pas. En fait, les guillemets doivent être attrappés par le shell avant l'interprétation et lorsque le "echo" s'affiche, l'interprétation a commencé donc ça ne marche pas.
 
J'ai cherché plein de moyens et j'ai finallement trouvé via la commande "eval". Cette commande a pour but d'interpréter ses arguments puis de faire exécuter le résultat par le shell => ex: eval date
 
Donc j'ai trouvé en faisant ceci

fic=`cat fichier |while read lig; do echo "\"$lig\""; done`
eval select choix in `echo $fic`; do echo $choix; done



---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [Bash] choisir une ligne d'un fichier avec une boucle select

 

Sujets relatifs
[débutant] retrouver la ligne courante du fichier[c] Récupération de fichier partagé sur un réseau
Proposer un fichier au téléchargementSELECT dans un INSERT mysql
DWR et envoi d'un fichier XML du serveur vers le navigateurAfficher les erreur lors du lancement d'un script bash
Extraire des noms et des emails de fichier htmFichier ouverts Word
trier un fichier sur 2 colonnes (résolu) 
Plus de sujets relatifs à : [Bash] choisir une ligne d'un fichier avec une boucle select


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR