Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

passage de variable à awk

4 réponses
Avatar
Lie Algebra
Bonjour,

echo "--local" | awk -v str="--lo" '{ if ( $1 ~ /^str/ ) print "Match
found" ; else print "No match found" }' me dit que No match found,
qu'est ce qui ne vas pas dans la condition if ?

E.S

4 réponses

Avatar
xtof.pernod
Lie Algebra a fait rien qu'à écrire :
Bonjour,

echo "--local" | awk -v str="--lo" '{ if ( $1 ~ /^str/ ) print "Match
found" ; else print "No match found" }' me dit que No match found,
qu'est ce qui ne vas pas dans la condition if ?



'str' n'est pas pris comme nom de variable, mais comme composant d'une pattern.
Il n'est donc pas substitué par la valeur de la variable str.

E.S



Suggestion:

$ echo "--local" | var="--lo" awk '{ if ( $1 ~ /^'$var'/ ) print "Match"; }' -
Match

..mais doit y a voir moyen de faire mieux, parce que ça, à maintenir..

--
christophe.
Avatar
Lie Algebra
xtof.pernod wrote:

Suggestion:

$ echo "--local" | var="--lo" awk '{ if ( $1 ~ /^'$var'/ ) print
"Match"; }' -
Match

..mais doit y a voir moyen de faire mieux, parce que ça, à maintenir..




En passant la regexp en paramètre :
echo "--local" | awk -v str=^"--lo" '{ if ( $1 ~ str ) print "Match
found" }' cela fonctionne mais du même coup, je ne peux plus utiliser
la valorisation de str dans la suite du script sans avoir à extraire
le '^'...

E.S
Avatar
Stephane CHAZELAS
2008-11-09, 17:39(+01), Lie Algebra:
Bonjour,

echo "--local" | awk -v str="--lo" '{ if ( $1 ~ /^str/ ) print "Match
found" ; else print "No match found" }' me dit que No match found,
qu'est ce qui ne vas pas dans la condition if ?


[...]

echo "--local" | awk -v str="--lo" '
{ if ($1 ~ "^" str) ...
}'

A noter que la syntaxe -v "var=value" expand les n, t, a...
Pour eviter cela on peut utiliser ARGV ou ENVIRON.

if expr x"--local" : x"--lo" > /dev/null
then echo match
else echo match
fi

(expr reconnait les BRE et awk les ERE).

Sinon, tout simplement:

awk '
BEGIN {
if (ARGV[1] ~ "^" ARGV[2])
print "match"
else
print "no match"
exit
}' --local --lo

Ou pour un cas aussi simple:

case --local in
(--lo*) echo match;;
(*) echo no match;;
esac

--
Stéphane
Avatar
naddy
Lie Algebra wrote:

En passant la regexp en paramètre :
echo "--local" | awk -v str=^"--lo" '{ if ( $1 ~ str ) print "Match
found" }' cela fonctionne mais du même coup, je ne peux plus utiliser
la valorisation de str dans la suite du script sans avoir à extraire
le '^'...



echo "--local" | awk -v str="--lo" '{ if ( $1 ~ "^" str ) print "Match
found" }'

--
Christian "naddy" Weisgerber