GNU/Linux >> Tutoriels Linux >  >> Linux

Variable externe dans Awk ?

Cette question a déjà des réponses ici :Fermé il y a 8 ans.

Duplication possible :
Utiliser un paramètre de script dans awk

J'ai un script, dans lequel un extrait de script est

x=3
awk '$2=$x{print $1}' infile

la variable externe est x,

mais cela provoque une erreur dans awk

donc dans cette situation, comment faire fonctionner awk avec succès ?

merci !

Réponse acceptée :

Une variable shell n'est que cela :un shell variables . Si vous voulez en faire un awk variable, vous avez besoin d'une syntaxe telle que :

awk -v x="$x" '$2 == x {print $1}' infile

ou

awk '$2 == x {print $1}' x="$x" infile

Cependant, ceux-ci souffrent d'un problème :les séquences d'échappement y sont développées (et avec GNU awk 4.2 ou supérieur, si $x commence par @/ et se termine par / , elle est traitée comme une variable de type regexp).

Ainsi, par exemple si la variable shell contient les deux caractères barre oblique inverse et n , la variable awk finira par contenir le newline caractère (et avec gawk 4.2+, s'il contient @/foo/ , la variable awk contiendra foo et être de type regexp ).

Une autre approche (mais qui nécessite un awk ou un nawk POSIX (par opposition à l'awk d'origine que l'on trouve encore sur quelques Unix impairs)) consiste à utiliser des variables d'environnement :

x="$x" awk '$2 == ENVIRON["x"] {print $1}' infile

Une autre approche (toujours avec les nouveaux awks) consiste à utiliser le tableau ARGV dans awk :

awk 'BEGIN {x = ARGV[1]; delete ARGV[1]}
  $2 == x {print $1}' "$x" infile

Linux
  1. Un guide du débutant pour rester bouche bée

  2. Script bash (I)

  3. Comment faire une évaluation variable indirecte ?

  4. `$?` ? Est-ce une variable ?

  5. $path Variable Env Variable ?

Variable d'exportation bash

Commande AWK sous Linux avec des exemples

Comment ajouter un stockage externe à ownCloud 9

Commande Awk sous Linux

Comment installer Maven sur Windows

chmod un lecteur externe fraîchement monté pour configurer l'accès en écriture