Pages : 1
#1 Le 03/05/2006, à 20:54
- butnuu74
[réglé] bash script
hello
j'aimerais reproduire ce genre de truc dans un bash script :
soit x lignes d'éléments obéissants à cette règle :
famille1 élément1 élément2 élement3
famille2 élément1 élément2
famille3 élément1 élément2 élement3 élement4
famille4 élément1 élément2 élement3 élement4 élement5 élement6
famille5 élément1
[...]
famillex
(les éléments peuvent être séparés d'un espace ou d'une virgule)
J'aimerais que le bash m'affiche sur une première ligne le nom de la famille, et sur une seconde ligne que soient affichés les éléments la constituant (pour subir un autre traitement que je vais pas détailler pour ne pas compliquer )
Exemple avec des données bidons :
fruits, pomme, poire, ananas, cerises
pâtes, spaguettis, penne, tortelini
couvre-chefs, chapeau, casquette, bonnet, bonnet de bain...
etc...
merci de toute aide et désolé d'avoir dû modéliser ma question pour bien me faire comprendre
Dernière modification par urss (Le 05/05/2006, à 23:32)
#2 Le 03/05/2006, à 21:58
- sksbir
Re : [réglé] bash script
Ta phrase sur ce que t'aimerais n'est pas très claire : affiché dans une seconde quoi ?
- la valeur "famille" est-elle une clé unique ?
- le séparateur de champs, c'est toujours un espace ?
voici un début (hypothese de travail : réponse = oui aux 2 questions précédentes)
for FAMILLE in `cut -d' ' -f1 $FICHIERSOURCE`
do
set `grep "^$FAMILLE" $FICHIERSOURCE`
echo FAMILLE : $FAMILLE : $# valeurs repérées
echo VALEUR1 : $1
echo VALEUR2 : $2
done
Dernière modification par sksbir (Le 03/05/2006, à 22:01)
Hors ligne
#3 Le 03/05/2006, à 22:58
- butnuu74
Re : [réglé] bash script
Ta phrase sur ce que t'aimerais n'est pas très claire : affiché dans une seconde quoi ?
oui j'ai précisé : une seconde ligne
- la valeur "famille" est-elle une clé unique ?
- le séparateur de champs, c'est toujours un espace ?
ok, va pour oui aux 2 questions
par contre je comprends pas le script, les données sont présentes en externe, dans FICHIERSOURCE, un fichier texte simple au même niveau que le bash ?
ça semble pas marcher par contre
#4 Le 04/05/2006, à 00:25
- sksbir
Re : [réglé] bash script
Les données sont stockées dans FICHIERSOURCE, lequel doit etre initialisé avec le nom du fichier source.
exemple concret:
$ cat TEST1
famille1 élément1 élément2 élement3
famille2 élément1 élément2
famille3 élément1 élément2 élement3 élement4
famille4 élément1 élément2 élement3 élement4 élement5 élement6
famille5 élément1
$ cat test_famille.sh
FICHIERSOURCE=TEST1
for FAMILLE in `cut -d' ' -f1 $FICHIERSOURCE`
do
set `grep "^$FAMILLE" $FICHIERSOURCE`
echo FAMILLE : $FAMILLE : $# valeurs repérées
echo VALEUR1 : $2
echo VALEUR2 : $3
done
$ sh test_famille.sh
FAMILLE : famille1 : 4 valeurs repérées
VALEUR1 : élément1
VALEUR2 : élément2
FAMILLE : famille2 : 3 valeurs repérées
VALEUR1 : élément1
VALEUR2 : élément2
FAMILLE : famille3 : 5 valeurs repérées
VALEUR1 : élément1
VALEUR2 : élément2
FAMILLE : famille4 : 7 valeurs repérées
VALEUR1 : élément1
VALEUR2 : élément2
FAMILLE : famille5 : 2 valeurs repérées
VALEUR1 : élément1
VALEUR2 :
$
J'ai modifié $1 $2 par $2 $3 sinon, le script est inchangé.
sinon, puisqu'il s'agit finalement juste de remettre en forme le fichier, voici un autre exemple:
$ cat test2_famille.sh
FICHIERSOURCE=TEST1
awk '
{ print $1
LSTVALEURS=""
for (I=2;I<=NF;I++) { LSTVALEURS=(LSTVALEURS "--" $I) }
print LSTVALEURS
}
' $FICHIERSOURCE
$ sh test2_famille.sh
famille1
--élément1--élément2--élement3
famille2
--élément1--élément2
famille3
--élément1--élément2--élement3--élement4
famille4
--élément1--élément2--élement3--élement4--élement5--élement6
famille5
--élément1
$
Dernière modification par sksbir (Le 04/05/2006, à 00:41)
Hors ligne
#5 Le 04/05/2006, à 08:08
- cep_
Re : [réglé] bash script
L'utilisation de dialog est une autre possibilité à exploiter en complément.
#6 Le 05/05/2006, à 23:31
- butnuu74
Re : [réglé] bash script
super, merci à vous deux
@sksbir : le second script est parfait, je vais garder l'idée
pour le premier par contre tu as juste oublié de faire un echo avec un for :
FAMILLE : famille1 : 4 valeurs repérées
VALEUR1 : élément1
VALEUR2 : élément2
...
VALEUR4 : élément4
merci, bonne soirée
Dernière modification par urss (Le 05/05/2006, à 23:32)
Pages : 1