j'ai une question sur le fonctionnement de gsub dans awk.
L'expression régulière // en substitution me donne '1'.
Ce qui ne correspond pas à ce que fait sed.
% echo ABCD | sed 's/B.*$//'
A
% echo ABCD | awk '{ gsub(/B.*$/,//); print; }'
A1
Bon, je peux faire faire ce que je veux à awk par
% echo ABCD | awk '{ gsub(/B.*$/,""); print; }'
A
mais c'est moyennement satisfaisant.
Une idée ?
Marc Boyer
--
À mesure que les inégalités regressent, les attentes se renforcent.
François Dubet
Tu demandes à awk de remplacer ce qui correspond à l'expression B.*$ par la chaîne //. Problème, qu'est-ce que c'est que ce truc, //, comment awk va-t-il l'interprêter ? Vu que / est un l'opérateur de division, il est probable qu'il finisse avec l'entier 1, converti en la chaîne 1.
Bon, je peux faire faire ce que je veux à awk par
% echo ABCD | awk '{ gsub(/B.*$/,""); print; }' A
mais c'est moyennement satisfaisant.
Au contraire, c'est bien plus logique et c'est pour ça que ça marche !
-- . o . . . o Tanguy o o o
Marc Boyer, 2013-11-28 10:34+0100:
j'ai une question sur le fonctionnement de gsub dans awk.
L'expression régulière // en substitution me donne '1'.
C'est une chaîne de substitution qu'il faut, pas une expression
régulière.
Ce qui ne correspond pas à ce que fait sed.
Si.
% echo ABCD | sed 's/B.*$//'
A
Tu demandes à sed de remplacer ce qui correspond à l'expression B.*$ par
la chaîne vide. Bien.
Tu demandes à awk de remplacer ce qui correspond à l'expression B.*$ par
la chaîne //. Problème, qu'est-ce que c'est que ce truc, //, comment awk
va-t-il l'interprêter ? Vu que / est un l'opérateur de division, il est
probable qu'il finisse avec l'entier 1, converti en la chaîne 1.
Bon, je peux faire faire ce que je veux à awk par
% echo ABCD | awk '{ gsub(/B.*$/,""); print; }'
A
mais c'est moyennement satisfaisant.
Au contraire, c'est bien plus logique et c'est pour ça que ça marche !
Tu demandes à awk de remplacer ce qui correspond à l'expression B.*$ par la chaîne //. Problème, qu'est-ce que c'est que ce truc, //, comment awk va-t-il l'interprêter ? Vu que / est un l'opérateur de division, il est probable qu'il finisse avec l'entier 1, converti en la chaîne 1.
Bon, je peux faire faire ce que je veux à awk par
% echo ABCD | awk '{ gsub(/B.*$/,""); print; }' A
mais c'est moyennement satisfaisant.
Au contraire, c'est bien plus logique et c'est pour ça que ça marche !
-- . o . . . o Tanguy o o o
Marc Boyer
Le 28-11-2013, Tanguy Ortolo a écrit :
Marc Boyer, 2013-11-28 10:34+0100:
j'ai une question sur le fonctionnement de gsub dans awk. L'expression régulière // en substitution me donne '1'.
C'est une chaîne de substitution qu'il faut, pas une expression régulière.
Tu demandes à awk de remplacer ce qui correspond à l'expression B.*$ par la chaîne //. Problème, qu'est-ce que c'est que ce truc, //, comment awk va-t-il l'interprêter ? Vu que / est un l'opérateur de division, il est probable qu'il finisse avec l'entier 1, converti en la chaîne 1.
Joies et bonheur des langages à typage, disons, faible.
Merci, Marc -- À mesure que les inégalités regressent, les attentes se renforcent. François Dubet
Le 28-11-2013, Tanguy Ortolo <tanguy@ortolo.eu> a écrit :
Marc Boyer, 2013-11-28 10:34+0100:
j'ai une question sur le fonctionnement de gsub dans awk.
L'expression régulière // en substitution me donne '1'.
C'est une chaîne de substitution qu'il faut, pas une expression
régulière.
Tu demandes à awk de remplacer ce qui correspond à l'expression B.*$ par
la chaîne //. Problème, qu'est-ce que c'est que ce truc, //, comment awk
va-t-il l'interprêter ? Vu que / est un l'opérateur de division, il est
probable qu'il finisse avec l'entier 1, converti en la chaîne 1.
Joies et bonheur des langages à typage, disons, faible.
Merci,
Marc
--
À mesure que les inégalités regressent, les attentes se renforcent.
François Dubet
Tu demandes à awk de remplacer ce qui correspond à l'expression B.*$ par la chaîne //. Problème, qu'est-ce que c'est que ce truc, //, comment awk va-t-il l'interprêter ? Vu que / est un l'opérateur de division, il est probable qu'il finisse avec l'entier 1, converti en la chaîne 1.
Joies et bonheur des langages à typage, disons, faible.
Merci, Marc -- À mesure que les inégalités regressent, les attentes se renforcent. François Dubet
Tu demandes à awk de remplacer ce qui correspond à l'expression B.*$ par la chaîne //. Problème, qu'est-ce que c'est que ce truc, //, comment awk va-t-il l'interprêter ? Vu que / est un l'opérateur de division, il est probable qu'il finisse avec l'entier 1, converti en la chaîne 1.
ce n'est pas une histoire de division... //, dans le contexte courant, signifie rechercher une chaine vide sur la ligne courante, ce qui est vrai => 1
Merci de la précision.
Pour ma culture, d'où te viens cette connaissance, ou, formulé autrement, quelle doc lire pour découvrir ce type d'info ?
Marc Boyer -- À mesure que les inégalités regressent, les attentes se renforcent. François Dubet
Le 28-11-2013, Cyrille Lefevre <cyrille.lefevre-news%nospam@laposte.net.invalid> a écrit :
Tu demandes à awk de remplacer ce qui correspond à l'expression B.*$ par
la chaîne //. Problème, qu'est-ce que c'est que ce truc, //, comment awk
va-t-il l'interprêter ? Vu que / est un l'opérateur de division, il est
probable qu'il finisse avec l'entier 1, converti en la chaîne 1.
ce n'est pas une histoire de division...
//, dans le contexte courant, signifie rechercher une chaine vide sur la
ligne courante, ce qui est vrai => 1
Merci de la précision.
Pour ma culture, d'où te viens cette connaissance, ou, formulé
autrement, quelle doc lire pour découvrir ce type d'info ?
Marc Boyer
--
À mesure que les inégalités regressent, les attentes se renforcent.
François Dubet
Tu demandes à awk de remplacer ce qui correspond à l'expression B.*$ par la chaîne //. Problème, qu'est-ce que c'est que ce truc, //, comment awk va-t-il l'interprêter ? Vu que / est un l'opérateur de division, il est probable qu'il finisse avec l'entier 1, converti en la chaîne 1.
ce n'est pas une histoire de division... //, dans le contexte courant, signifie rechercher une chaine vide sur la ligne courante, ce qui est vrai => 1
Merci de la précision.
Pour ma culture, d'où te viens cette connaissance, ou, formulé autrement, quelle doc lire pour découvrir ce type d'info ?
Marc Boyer -- À mesure que les inégalités regressent, les attentes se renforcent. François Dubet
"[...] However, regexp constants (such as /foo/) may be used like simple expressions. When a regexp constant appears by itself, it has the same meaning as if it appeared in a pattern, i.e., â($0 ~ /foo/)â [...]"
Je ne sais pas si c'est standard, cela dit.
-- Alain.
Marc Boyer <Marc.Boyer@cert.onera.fr.invalid> writes:
"[...] However, regexp constants (such as /foo/) may be used like simple
expressions. When a regexp constant appears by itself, it has the same
meaning as if it appeared in a pattern, i.e., â($0 ~ /foo/)â [...]"
"[...] However, regexp constants (such as /foo/) may be used like simple expressions. When a regexp constant appears by itself, it has the same meaning as if it appeared in a pattern, i.e., â($0 ~ /foo/)â [...]"