2017-03-15 2 views
1

j'ai un petit fichier de test contenant:awk plusieurs termes de recherche avec une variable et négation

awk this 
and not awk this 
but awk this 
so do awk this 

Et j'ai essayé les commandes awk suivantes, bash, mais chacun ne produit aucune sortie:

f=awk; awk '/$f/ && !/not/' test.txt 
f=awk; awk '/\$f/ && !/not/' test.txt 
f=awk; awk '/"$f"/ && !/not/' test.txt 
f=awk; awk -v f="$f" '/f/ && !/not/' gtest.txt 

L'utilisation de guillemets " génère une erreur "événement non trouvé" dans l'interpréteur de commandes en raison de !.

Comment puis-je effectuer une recherche sur une variable et annuler une autre chaîne dans la même commande?

Répondre

2

Utilisez awk comme ceci:

f='awk' 

awk -v f="$f" -v n='not' '$0 ~ f && $0 !~ n' file 
awk this 
but awk this 
so do awk this 

Ou si vous ne voulez pas passer n='not' à awk:

awk -v f="$f" '$0 ~ f && $0 !~ /not/' file 

awk this 
but awk this 
so do awk this 
+1

Merci! Je pense que ça va le faire. –

0

points de awk gawk pour moi et ce qui suit travaillé très bien:

awk -vf=awk '$0 ~ f && !/not/' file 
+0

Il n'y a rien de spécifique à Gawk ici. Cela semble être une reformulation de la réponse existante d'Anubhava. – tripleee