Donc il faut que tu mettes done <<< "$donnee" dans ton code en #13.
Donc il faut que tu mettes done <<< "$donnee" dans ton code en #13.
Perso, je n'approuve pas du tout cette pratique, car c'est un pur bashisme déjà, et surtout pour une raison de sécurité: le fichier, ici ne fait que quelques lignes, mais essayez avec un fichier de 10 millions de lignes. Je pense que vous avez le temps d'aller discuter à la machine à café avant qu'il n'affiche la première ligne, et seulement si l'admin ne vous poursuit pas dans les couloirs avant
Toujours le même problème ça ne calcul que la première ligne.
C'est une bonne occasion d'aller prendre un café alorsJe pense que vous avez le temps d'aller discuter à la machine à café avant qu'il n'affiche la première ligne, et seulement si l'admin ne vous poursuit pas dans les couloirs avant
tu as essayé ma dernière proposition pour lire le fichier ?
Ah ben je sais pas alors, mais de toutes façons il vaudrait mieux que tu utilises une substitution de processus :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 while read line # La boucle while va permettre de lire le fichier ligne par ligne do ./affichersigne $line done < <(cut -d ":" -f1,2,3 $1 | sed 's/:/ /g')
Non, sérieusement, une façon plus propre mais toujours du bashisme:
Pas testé, mais attention, il faut absolument un espace entre les 2 chevrons, donc < <( et pas <<(.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 #Programme principal if [ $# -ne 1 ]; then aide elif [ $# -eq 1 ]; then while read line # La boucle while va permettre de lire le fichier ligne par ligne do ./affichersigne $line done < <(cut -d ":" -f1,2,3 $1 | sed 's/:/ /g')
PS: je suppose que le code que tu as fourni n'est pas complet, car je ne vois pas la fin du if.
Yes, ça revoie la réponse que de la première ligne du .txt. Idem
avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part done < <(cut -d ":" -f1,2,3 $1 | sed 's/:/ /g')
ces commandes sont inutiles : read peut lire ces données en assignant plusieurs variables, par exemple* :ou un tableau :
Code : Sélectionner tout - Visualiser dans une fenêtre à part line='Galle:Martin:12-2-1989:rue du casino:Uriage-les-Bains:38000'; echo "$line" | { IFS=':-' read prenom nom jour mois reste; printf '%s\n' "$prenom" "$nom" "$jour" "$mois";}--
Code : Sélectionner tout - Visualiser dans une fenêtre à part echo "$line" | { IFS=':-' read -a tableau; printf '%s\n' "${tableau[@]::4}";}
* ici, pour la démonstration je fais un echo, et read ; printf dans une liste de commande.
Comment lances-tu ton script sur la machine en question ?
Que donne la commande:
Et est-ce que tu as vérifié que le script affichesigne est bien le même que celui que tu utilise sur ta propre machine ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part file fichier.csv
Simples affectations ? Non ? (Après, facile d'ajouter, ou non, un zéro, un appel de fonction, etc )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 $ while IFS=':' read a b c d;do j=${c%%-*};m=${c#*-};m=${m%-*};echo $m $j;done <personnes.txt 2 12 9 14 3 13 11 19 12 22 10 24
Code : Sélectionner tout - Visualiser dans une fenêtre à part IFS=':-' read
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 $ line='Galle:Martin:12-2-1989:rue du casino:Uriage-les-Bains:38000'; echo "$line" | { IFS=':-' read prenom nom jour mois reste; printf '%s\n' "$prenom" "$nom" "$jour" "$mois";} Galle Martin 12 2 $ line='Galle:Jean-Claude:12-2-1989:rue du casino:Uriage-les-Bains:38000'; echo "$line" | { IFS=':-' read prenom nom jour mois reste; printf '%s\n' "$prenom" "$nom" "$jour" "$mois";} Galle Jean Claude 12
aïe ! j'avais anticipé Jean-Marc, mais pas Jean-Claude.
donc, en fait, il vaut mieux effectuer un Remplacement de paramètre (IFS='-' read -a jmY <<<"$date") postérieurement.
oui, mais si le .txt contient par exemple :
Lucien:Martin:12-13-1989:rue du casinoaris:75016
Si les entrées, pour ton script, comme pour tous les logiciels du monde, ne respectent pas le format idoine, alors on peut mettre tous ces programmes à la poubelle.oui, mais si le .txt contient par exemple :
Pourquoi vérifierais-tu que le mois ne dépasse pas 13 plus que le format de date, ou la présence d'un "\0" en plein milieu de ligne, ou que le fichier existe ?
Pour le fun:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 $ cat personnes.txt Galle:Martin:12-2-1989:rue du casino:Uriage-les-Bains:38000 Goudy:Debby:14-9-1990:avenue des cheveux raides:Paris:75002 Pleur:Jean:13-3-1994:rue de la poisse:Grenoble:38000 Prane:Dolly:19-11-1995: place de la pharmacie:Grenoble:38100 Mieu:Jeff-Edmond:22-12-1992:sentier des efforts:Grenoble:38000 Honnete:Marie:24-10-1982:boulevard Guignol:Paris:75003
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 $ cat signe.bash #!/bin/bash Jmax="20:19:20:20:21:21:22:23:23:23:22:21" Signe1="Capricorne:Verseau:Poissons:Belier:Taureau:Gemeaux:Cancer:Lion:Vierge:Balance:Scorpion:Sagittaire:Capricorne" while IFS=":" read a b c d do IFS="-" read j m y <<<$c i=$(cut -d\: -f $m <<<$Jmax) n=0 [[ $i -le $j ]] && n=1 echo $a $b $c $(cut -d\: -f $((m+n)) <<<$Signe1) done <personnes.txtPS: Ici, je n'utilise pas de tableau volontairement suite indication donné dans le post initial.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 $ ./signe.bash Galle Martin 12-2-1989 Verseau Goudy Debby 14-9-1990 Vierge Pleur Jean 13-3-1994 Poissons Prane Dolly 19-11-1995 Scorpion Mieu Jeff-Edmond 22-12-1992 Capricorne Honnete Marie 24-10-1982 Scorpion
C'est pas de moi, mais du PO et ces "gens" habite dans une rue en rapport avec leur identité
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager