2 votes

Utilisation de variable en awk

Bonjour, je voudrais compter le nombre de mots avec des longueurs spécifiques. J'utilise cette commande.

awk 'length == 2' mydict.txt | wc -l

ce code donne ce que je veux mais si j'essaie de mettre une variable à la place du nombre 2, cela ne fonctionne pas. Le code est comme ceci

awk 'length == $var' mydict.txt | wc -l

et le terminal affiche 0. Que puis-je faire?

5voto

pLumo Points 23269

Les variables ne seront pas étendues dans les guillemets simples (').

Normalement, vous pourriez simplement utiliser des guillemets doubles ("), mais pour awk, ce n'est pas une bonne solution car cela entraînera des problèmes avec du code awk un peu plus compliqué.

Mieux vaut assigner une variable awk avec -v:

awk -v var="$var" 'length == var' mydict.txt | wc -l

Cependant, il n'est pas nécessaire d'utiliser wc -l, awk peut le faire pour vous :

awk -v var="$var" 'length == var{n++} END{print n}' mydict.txt

Vous pouvez également utiliser grep -c:

grep -c "^.\{$var\}\$" mydict.txt

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X