Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 13/12/2011, à 23:03

louis3d

Script de Noël

Devant la crèche, sous le sapin, les souliers doivent se remplir... Qui donne à qui ? Ce petit script inutile permet de faire un tirage au sort. Faire une liste des membres de la famille nommée noms.csv, faire tourner le script et voilà !

#!/bin/bash
# On enlève les malins qui ont mis deux fois leur nom
cat noms.csv | sort | uniq > liste_donneurs.temp
# Au debut tous les donneurs sont receveurs
cp liste_donneurs.temp liste_receveurs.temp
cp liste_donneurs.temp liste_receveurs_new.temp
#
cat liste_donneurs.temp |while read i
do
 #on fait une liste de receveurs sans le donneur, on mélange, on prend le premier -> c'est l'heureux élu !
 heureux_elu=`cat liste_receveurs_new.temp | grep -v "$i" |sort -R |head -n1` 
 echo "$i donne à $heureux_elu" >> liste_finale.txt
 # On met l'heureux élu dans la liste des déjà gatés :
 echo "$heureux_elu" >> liste_gate.temp 
 # on fait une nouvelle liste de receveurs sans les gatés
 test -f liste_receveurs_old.temp && rm liste_receveurs_old.temp
 cat liste_receveurs.temp > liste_receveurs_old.temp
 cat liste_gate.temp >> liste_receveurs_old.temp
 sort liste_receveurs_old.temp | uniq -u > liste_receveurs_new.temp 
done
#on fait le ménage
rm liste_receveurs.temp liste_receveurs_new.temp liste_receveurs_old.temp liste_gate.temp liste_donneurs.temp

Le résultat est dans liste_finale.txt

Dernière modification par louis3d (Le 13/12/2011, à 23:46)

Hors ligne

#2 Le 13/12/2011, à 23:08

sputnick

Re : Script de Noël

hmm

dès la première ligne ca foire : on utilise uniq seulement après avoir utilisé sort.

Je ne lit pas la suite


Il existe un tunnel obscur dans la lumière infinie. Lao-Tseu
https://sputnick.fr

Hors ligne

#3 Le 13/12/2011, à 23:30

louis3d

Re : Script de Noël

Ca ne foire pas, mais effectivement c'est mieux avec !
Merci

Hors ligne

#4 Le 14/12/2011, à 00:04

sputnick

Re : Script de Noël

louis3d a écrit :

Ca ne foire pas, mais effectivement c'est mieux avec !
Merci

Si ça foire, puisque tu n'élimine pas les doublons comme annoncé.

Concernant les autres soucis :

- l'usage de `` est déprécié en faveur de la forme $() : c'est plus lisible et moins bugué (essaye d'imbriquer plusieurs `` tu comprendra)
- trop de redirections, tu devrais utiliser des variables
- ne pas utiliser cat lorsque l'appli suivante dans le pipe peut très bien lire ce fichier :

cat liste_donneurs.temp |while read i
cat noms.csv | sort

- pas besoin de tester un fichier à supprimer avec rm
- description incomplète de ce que fait le script et le format d'entrée

Ça fait caca en gros et ça me donne pas envie de l'utiliser


Il existe un tunnel obscur dans la lumière infinie. Lao-Tseu
https://sputnick.fr

Hors ligne

#5 Le 14/12/2011, à 10:05

analogfaz

Re : Script de Noël

Bon courage louis3d,
les remarques de sputnick me semblent constructives.

Hors ligne

#6 Le 14/12/2011, à 10:23

louis3d

Re : Script de Noël

C'est vrai je reconnais, c'est brouillon et "premier jet"
Merci pour les conseils.

Hors ligne