Script shell assez compliqué mais pas trop
Antiloft
-
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je penche depuis un moment sur un script mais je n'ai pas l'impression d'avoir la bonne manière de faire.
Il faut que je passe à un script un ou plusieurs mots séparés par des virgules, et que ce script aille chercher dans un fichier une correspondance pour chaque mot.
*Le fichier des mots est de type:
mot1 correspondance1
mot2 correspondance2
Si un mot n'est pas trouvé, il ne doit pas être modifié
Donc par exemple si je fais (je travaille par entrees-sorties c'est mieux):
echo "mot1,mot2,mot3" | monscript.sh
=> Je dois avoir comme résultat : correspondance1, correspondance2, mot3
J'étais parti sur une solution qui "splitte" chaque mot et parcours pour chaque mot le fichier mais je trouve ça un peu lourd sachant que bash dispose d'outils puissants comme sed,... pour faire cela d'un seul coup peut-etre.
Comment vous y prendriez vous ?
Merci d'avance pour vos conseils :)
Je penche depuis un moment sur un script mais je n'ai pas l'impression d'avoir la bonne manière de faire.
Il faut que je passe à un script un ou plusieurs mots séparés par des virgules, et que ce script aille chercher dans un fichier une correspondance pour chaque mot.
*Le fichier des mots est de type:
mot1 correspondance1
mot2 correspondance2
Si un mot n'est pas trouvé, il ne doit pas être modifié
Donc par exemple si je fais (je travaille par entrees-sorties c'est mieux):
echo "mot1,mot2,mot3" | monscript.sh
=> Je dois avoir comme résultat : correspondance1, correspondance2, mot3
J'étais parti sur une solution qui "splitte" chaque mot et parcours pour chaque mot le fichier mais je trouve ça un peu lourd sachant que bash dispose d'outils puissants comme sed,... pour faire cela d'un seul coup peut-etre.
Comment vous y prendriez vous ?
Merci d'avance pour vos conseils :)
A voir également:
- Script shell assez compliqué mais pas trop
- Classic shell - Télécharger - Personnalisation
- Script vidéo youtube - Guide
- Mas script - Accueil - Windows
- Ghost script - Télécharger - Polices de caractères
- Vous ne pouvez pas récupérer votre compte pour le moment, car google n'a pas assez d'informations pour s'assurer que ce compte vous appartient. - Guide
4 réponses
salut,
sed n'est pas un outil bash, c'est un programme à part entière.
je travaille avec des entrées-sorties c'est mieux)
non, dans ton cas, le mieux serait de passer les mots en arguments au script.
moi, je ferais un script awk:
remplacer les virgules par une barre verticale,
tester le premier mot de la ligne contre la regex précédemment créée
etc
sed n'est pas un outil bash, c'est un programme à part entière.
je travaille avec des entrées-sorties c'est mieux)
non, dans ton cas, le mieux serait de passer les mots en arguments au script.
moi, je ferais un script awk:
remplacer les virgules par une barre verticale,
tester le premier mot de la ligne contre la regex précédemment créée
etc
Salut,
S'il existe des méthodes toutes faites, à mon avis elles ne feront pas grand chose d différents avec ce que tu décris (isoler chaque mot et comparer).
Pour ma part pour la comparaison je ferais un test sur une commande du genre :
On peut améliorer en forçant la prise en compte de l'espace (de tête je sais plus comment)
S'il existe des méthodes toutes faites, à mon avis elles ne feront pas grand chose d différents avec ce que tu décris (isoler chaque mot et comparer).
Pour ma part pour la comparaison je ferais un test sur une commande du genre :
grep ^mot1 monfichier
On peut améliorer en forçant la prise en compte de l'espace (de tête je sais plus comment)
Salut,
Effectivement sed n'est pas un outils bash, je voulais parler de bash en général avec ses programmes populaires installés par défaut comme sed. Le choix des entrées-sorties c'est pour ne pas être limité par la taille de l'argument que je passe à mon script.
Mais on peut partir sur une solution avec des arguments si c'est vraiment meilleur.
Dans ce cas je pourrais faire un for sur ${1//","/" "} pour traiter chaque mot et reconstruire ma liste modifiée au fur à mesure.
Mais comment remplacer les mots par leur correspondance dans le fichier ,uniquement s'il y a correspondance.
?
Effectivement sed n'est pas un outils bash, je voulais parler de bash en général avec ses programmes populaires installés par défaut comme sed. Le choix des entrées-sorties c'est pour ne pas être limité par la taille de l'argument que je passe à mon script.
Mais on peut partir sur une solution avec des arguments si c'est vraiment meilleur.
Dans ce cas je pourrais faire un for sur ${1//","/" "} pour traiter chaque mot et reconstruire ma liste modifiée au fur à mesure.
Mais comment remplacer les mots par leur correspondance dans le fichier ,uniquement s'il y a correspondance.
?