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.

#26 Le 28/09/2019, à 18:32

Watael

Re : Faire des additions

 ~ $ oIFS=$IFS
~  $ unset IFS
~  $ IFS=$oIFS
~  $ od -c <<<"$IFS"
0000000      \t  \n  \n
0000004
$

on ne le voit pas, mais il y a un espace avant le \t.

Dernière modification par Watael (Le 28/09/2019, à 18:33)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#27 Le 28/09/2019, à 19:08

kamaris

Re : Faire des additions

Non non, ce que je veux dire (et que dit le lien que j'ai donné) c'est

unset IFS
oIFS=$IFS
IFS=$oIFS

Là, tu ne retrouves pas ton IFS de départ, qui était non défini. Tu te retrouves avec un IFS défini à vide. Ce qui a un effet complètement différent sur la séparation des mots par le shell.

Hors ligne

#28 Le 28/09/2019, à 19:24

Watael

Re : Faire des additions

bah, oui ! si tu effaces l'IFS avant de faire la sauvegarde ...
lol

Dernière modification par Watael (Le 28/09/2019, à 19:24)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#29 Le 28/09/2019, à 19:32

kamaris

Re : Faire des additions

Ben ça peut arriver, car tu ne l'effaces pas en l'occurrence, tu le mets à « non défini », ce qui est une valeur particulière finalement, interprétée comme telle par le shell.
En toute rigueur, cette valeur doit donc être prise en compte au nombre des valeurs possibles à sauvegarder dans oIFS (IFS n'est pas forcément censé être à sa valeur par défaut quand tu le sauvegardes, sinon la sauvegarde ne servirait à rien, la valeur par défaut étant connue).
Sauf qu'avec un simple oIFS=$IFS / IFS=$oIFS, la sauvegarde / restauration ne marchera pas. Il faut utiliser les affectations conditionnelles du bash, comme mentionné dans le lien cité (y as-tu jeté un coup d'œil ?)

Dernière modification par kamaris (Le 28/09/2019, à 19:34)

Hors ligne

#30 Le 29/09/2019, à 10:38

Watael

Re : Faire des additions

dans l'univers des possibles, tout serait possible.

une variable non-définie n'existe pas. ce n'est pas une valeur particulière, ce n'est pas une valeur, ça n'existe pas.

entre ce qui te semble juste, en toute rigueur, et le comportement actuel du shell, c'est le comportement du shell qui prévaut.

il y a quelque chose qui m'échappe : pourquoi voudrais-je restaurer quelque chose qui n'existe pas ?

je te montre encore :

 $ printf "$IFS" | od -c
0000000      \t  \n
0000003
$ oIFS=$IFS
$ unset IFS
$ IFS=$oIFS
$ printf "$IFS" | od -c
0000000      \t  \n
0000003
$

j'ai lu, et je n'observe pas ce que user79743 montre.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#31 Le 29/09/2019, à 11:54

kamaris

Re : Faire des additions

Watael a écrit :

une variable non-définie n'existe pas. ce n'est pas une valeur particulière, ce n'est pas une valeur, ça n'existe pas.
entre ce qui te semble juste, en toute rigueur, et le comportement actuel du shell, c'est le comportement du shell qui prévaut.

Certes, or man bash dit : « If IFS is unset, the parameters are separated by spaces. »
C'est en ce sens que je dis que si IFS est non définie, il s'agit d'« une valeur particulière finalement, interprétée comme telle par le shell » : il adopte un comportement particulier dans ce cas.

Watael a écrit :

il y a quelque chose qui m'échappe : pourquoi voudrais-je restaurer quelque chose qui n'existe pas ?

Parce que tu ne restaurerais pas quelque chose qui n'existe pas, mais le fait que cette chose n'existe pas.
Si ta situation de départ est que l'IFS est non défini (par hypothèse, il ne s'agit pas de savoir pourquoi et comment on en est arrivé là), et que tu changes l'IFS pour tes besoins, alors restaurer ensuite l'IFS à sa situation de départ signifiera le remettre à non défini.
La question est : comment fait-on ça ?
Par un stockage basique de la valeur d'IFS dans une varibale temporaire ? Non, ça ne marchera pas, la valeur restaurée sera vide (cf. #27)
Par une affectation conditionnelle comme dans https://unix.stackexchange.com/question … 947#264947 ? Oui, là le caractère non défini d'IFS sera restauré.

Watael a écrit :

je te montre encore :

 $ printf "$IFS" | od -c
0000000      \t  \n
0000003
$ oIFS=$IFS
$ unset IFS
$ IFS=$oIFS
$ printf "$IFS" | od -c
0000000      \t  \n
0000003
$

J'ai bien vu ce que tu dis, mais cela ne correspond pas à l'hypothèse dans laquelle je place la discussion dès #25, à savoir que l'on ne part pas d'un IFS à sa valeur par défaut, mais d'un IFS non défini.

Watael a écrit :

j'ai lu, et je n'observe pas ce que user79743 montre.

Que veux-tu dire ?

Hors ligne

#32 Le 29/09/2019, à 12:17

Watael

Re : Faire des additions

je ne spécule pas sur des hypothèses improbables.
à l'ouverture d'un shell, l'IFS a une valeur par défaut. point.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#33 Le 29/09/2019, à 12:19

kamaris

Re : Faire des additions

Effectivement, comme ça c'est plus simple wink

Hors ligne

#34 Le 29/09/2019, à 12:29

Watael

Re : Faire des additions

ben, oui. KISS!
smile


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#35 Le 11/10/2019, à 13:16

jeteztout

Re : Faire des additions

J'utilise le script et c'est fort pratique.

Je me demandais s'il était possible de l'élaborer un peu ?

Par exemple si mon fichier source ressemble à ça :

"Input 1" 1 2 3 !

"Input 2"  4 5 6 !

Et que je souhaite avoir en résultat :

"Input 1" 6
"Input 2" 15

Où pour le coup ce qui est entre guillemet " " doit être repris tel quel et le ! ne sert qu'à dire que l'addition doit s'arrêter à cette endroit.

Est-ce très compliqué ? Merci encore smile

Hors ligne

#36 Le 11/10/2019, à 14:06

pingouinux

Re : Faire des additions

Hello,

awk -F'["!]' '{n=split($3,v," ");s=0;for(i=1;i<=n;i++){s+=v[i]};if(s)printf("\"%s\" %d\n",$2,s)}' fichier

Édité :
Modification du format pour tenir compte des nombres non entiers (%d -> %s)

awk -F'["!]' '{n=split($3,v," ");s=0;for(i=1;i<=n;i++){s+=v[i]};if(s)printf("\"%s\" %s\n",$2,s)}' fichier

Dernière modification par pingouinux (Le 11/10/2019, à 16:56)

Hors ligne

#37 Le 11/10/2019, à 16:30

LeoMajor

Re : Faire des additions

bonjour,

:~$ cat /tmp/text01.txt 
"Input 1" 1 2 3 !
"Input 2"  4 5 6 !
"Input 3"  100 101 citron 102 vanille total !
"Input 4"  0 1 2 @ total !
:~$ cat /tmp/text02.txt 
"Input 1" 1 2 3 !
"Input 2"  4 5 6 !
"Input 3"  100 101 citron 102 vanille total !
"Input 4"  0 1 -2 -9 @ total !
"Input 5"  titane -11.5 +4.3 -0.3 +0.75 !
:~$ gawk 'BEGIN{FPAT="[-|+]*[0-9.]+|\"Input [0-9]+\""; total=0; }; BEGINFILE{sum=0}{for (i=2;i<=NF;i++)loc+=$i}{print $1,loc; sum+=loc; loc=0}; ENDFILE {print FILENAME,"somme=",sum; total+=sum}; END {print "total=",total}' /tmp/text*.txt 
"Input 1" 6
"Input 2" 15
"Input 3" 303
"Input 4" 3
/tmp/text01.txt somme= 327
"Input 1" 6
"Input 2" 15
"Input 3" 303
"Input 4" -10
"Input 5" -6.75
/tmp/text02.txt somme= 307.25
total= 634.25

Hors ligne

#38 Le 16/10/2019, à 09:46

jeteztout

Re : Faire des additions

Super! Quel bonheur de ne plus avoir à utiliser d'interface wink

Merci à tous

Dernière modification par jeteztout (Le 16/10/2019, à 09:46)

Hors ligne