Script bash auto_increment et colonnes
Résolu/Fermé
dave jnr
Messages postés
36
Date d'inscription
jeudi 4 février 2010
Statut
Membre
Dernière intervention
5 février 2014
-
20 nov. 2011 à 00:28
dave jnr Messages postés 36 Date d'inscription jeudi 4 février 2010 Statut Membre Dernière intervention 5 février 2014 - 21 nov. 2011 à 03:10
dave jnr Messages postés 36 Date d'inscription jeudi 4 février 2010 Statut Membre Dernière intervention 5 février 2014 - 21 nov. 2011 à 03:10
A voir également:
- Script bash auto_increment et colonnes
- Script vidéo youtube - Guide
- Classer par ordre alphabétique excel plusieurs colonnes - Guide
- Word colonnes indépendantes - Guide
- Inverser deux colonnes excel - Guide
- Figer des colonnes excel - Guide
2 réponses
Utilisateur anonyme
Modifié par qqchquicommenceparQ le 20/11/2011 à 01:06
Modifié par qqchquicommenceparQ le 20/11/2011 à 01:06
salut,
t'as appris à coder du bash quand, ou dans un livre qui date de quelle année ? on ne code plus comme ça maintenant.
autant un pipe que les parenthèses créent des sous-shells en dehors desquelles $id n'existe pas.
il faudrait faire le echo à l'intérieur des parenthèses.
mais bash permet de faire autrement
et ça sort d'où
enfin, pourquoi ne pas utiliser wc pour obtenir le nombre de lignes d'info2, que tu assignerais à id ?
t'as appris à coder du bash quand, ou dans un livre qui date de quelle année ? on ne code plus comme ça maintenant.
autant un pipe que les parenthèses créent des sous-shells en dehors desquelles $id n'existe pas.
il faudrait faire le echo à l'intérieur des parenthèses.
mais bash permet de faire autrement
while read ligne do let $[ id= 'expr $id + 1' ] done <infos2
et ça sort d'où
let $[ id= 'expr $id + 1' ]soit tu utilises l'évaluation arithmétique (même à l'ancienne comme tu le fais ici), soit let, soit expr, mais pas les trois.
enfin, pourquoi ne pas utiliser wc pour obtenir le nombre de lignes d'info2, que tu assignerais à id ?
Utilisateur anonyme
Modifié par qqchquicommenceparQ le 21/11/2011 à 02:31
Modifié par qqchquicommenceparQ le 21/11/2011 à 02:31
- un pipe |, tout comme les parenthèses crée un sous-shell, en dehors duquel les variables qui y sont définies n'ont pas de valeurs
alors que
- let évalue des expressions arithmétiques
$[ ] évalue des expressions arithmétiques (maintenant on utilise $(( )) )
expr est un programme externe qui évalue entre autre des expressions arithmétiques
utiliser les trois en même temps n'a pas de sens, un seul est suffisant.
- j'ai fait un test rapide, duquel il ressort qu'une boucle while est plus rapide que wc.
si tu peux utiliser bash4, mapfile paraît encore plus rapide.
- jisisv te parle entre autre du format de ton fichier, tu devrais adopter le format CSV (comma separated values), qui utilise un caractère unique (une virgule, un point-virgule, une tabulation...) pour séparer les champs d'un fichier de données.
- demander la date de naissance plutôt que l'âge permet de facilement faire évoluer l'âge au court du temps, alors que le contraire n'est pas aussi fiable.
imaginons un programme qui te demande quand il te pose une question, au lieu de te demander la date d'aujourd'hui. il sera difficile (si possible) demain de dire depuis combien de jour il t'a interrogé, alors que si il te demande la date, il sera très facilement de calculer que cela fait 1,2,3..jours qu'il l'a fait.
( var=12 ) echo $varcela n'affiche rien, car var est définie dans le sous-shell entre parenthèses.
alors que
( var=12; echo $var )affiche bien 12, car l'affichage est demandé depuis le sous-shell, dans lequel la variable est définie et existe.
- let évalue des expressions arithmétiques
$[ ] évalue des expressions arithmétiques (maintenant on utilise $(( )) )
expr est un programme externe qui évalue entre autre des expressions arithmétiques
utiliser les trois en même temps n'a pas de sens, un seul est suffisant.
- j'ai fait un test rapide, duquel il ressort qu'une boucle while est plus rapide que wc.
si tu peux utiliser bash4, mapfile paraît encore plus rapide.
mapfile -t < fichier.txt echo ${#MAPFILE[@]}
- jisisv te parle entre autre du format de ton fichier, tu devrais adopter le format CSV (comma separated values), qui utilise un caractère unique (une virgule, un point-virgule, une tabulation...) pour séparer les champs d'un fichier de données.
- demander la date de naissance plutôt que l'âge permet de facilement faire évoluer l'âge au court du temps, alors que le contraire n'est pas aussi fiable.
imaginons un programme qui te demande quand il te pose une question, au lieu de te demander la date d'aujourd'hui. il sera difficile (si possible) demain de dire depuis combien de jour il t'a interrogé, alors que si il te demande la date, il sera très facilement de calculer que cela fait 1,2,3..jours qu'il l'a fait.
dave jnr
Messages postés
36
Date d'inscription
jeudi 4 février 2010
Statut
Membre
Dernière intervention
5 février 2014
21 nov. 2011 à 03:10
21 nov. 2011 à 03:10
Merci encore @qqchquicommenceparQ pour ces explications : ). Je vais essayer de réécrire tout mon code en les suivant. Au fait (tu as sans doute dû le remarquer mais) je dois préciser que j'utilise MinGW sous Windows pour tester mes codes (vu que mon pc Ubuntu est en panne) donc il y a des différences de syntaxes. Mais de toutes façons je te ferais savoir si j'ai encore un problème.
Modifié par jisisv le 21/11/2011 à 05:25
Tu remplaceras avantageusement lers lignes
echo "Entrer votre nom :"
read n
par
read -p " Votre nom ? " nom
voir help read
* utilise des noms de variable parlants; lorsque tu réaliseras un script complexe, il sera lisible et plus maintenable.
Pourquoi placer des espaces supplémentaires entre les champs? Un ":" suffit. Ce sera plus facile à manier avec cut (man 1 cut)
De plus on n'encode jamais un age mais un(e) date/année... de naissance.
Johan
Modifié par dave jnr le 20/11/2011 à 23:31
Au fait @qqchquicommenceparQ je suis débutant en bash! ^^