11
votes

Utilisez une variable Bash dans l'expression AWK

J'ai essayé le snippet suivant dans un script shell, mais awk n'a pas trouvé $ réf xxx


3 Réponses :


18
votes

Votre question est libellée vraiment pauvre ...

Quoi qu'il en soit, je pense que vous voulez que vous voulez ceci: xxx

note le s'échappant de 2 $ et les citations doubles.

ou ceci: xxx note le jugement Utilisation de citations doubles et simples et sans s'échapper sur 2 $ .

Vous devez utiliser l'expansion de Shell, comme cela engloberait l'exportation d'une variable de coque et de l'utiliser à partir de L'environnement avec AWK - qui est Overkill dans cette situation: xxx

Je pense que AWK ne prend pas en charge les variables dans /... / Guards. s'il vous plaît corrigez-moi si je me trompe.


5 commentaires

2 $ fonctionne bien avec et sans le \. La question est d'environ $ Réf, qui n'est pas dépensée par AWK. THX


@FRITSCHY: Pour de nombreuses personnes utilisant Internet, l'anglais n'est pas leur langue maternelle; Certaines personnes utilisent Google pour traduire leur question. ;-)


Vehomzzz, lors de l'utilisation de citations doubles - qui a été ce que j'ai suggéré à Roder de laisser la coquille développer $ ref correctement, vous devez échapper 2 $ - fin empêcher la coque de se développer ce.


@Dave - OK, je n'ai pas anticipé la traduction de Google. Merci d'expliquer;)


Vehomzzz - aucune infraction vraiment :) - ce n'est pas ma langue maternelle, pas même ma deuxième, ce qui pourrait être évident;)



46
votes

au lieu de cibler des jeux dans la coquille, utilisez l'option -v pour transmettre la variable de coque sous forme de variable AWK: xxx

si $ ref est juste du texte et non une expression régulière, utilisez la fonction index () au lieu de match () .


2 commentaires

Pourriez-vous m'approcher comment faire cela dans mon cas? à gauche = 1; droit = ​​4; grep ETM21CH01EPU3Z -A1 SLF_454.FNA | queue 1 | awk '{print substrateur (0,1,4 $)}' Works and Sorties GTTG, mais la version avec variables ne vous remercie pas: gauche = 1; droit = ​​4; grep ETM21CH01EPU3Z -A1 SLF_454.FNA | queue 1 | awk -v l = "$ gauche" r = "$ droite" '{print substrateur ($ 0, l, r)}' awk: cmd. Ligne: 1: FATAL: Impossible d'ouvrir le fichier `{imprimé substrateur (0 $, L, R)} 'pour la lecture


@Perlnika, vous avez besoin d'un -v pour chaque variable: awk -v l = "$ gauche" -v r = "$ droite"



1
votes

in GAWK , vous avez le tableau Environ TRAY, E.G. awk 'fin {improvemé ["ref"]}' / dev / null imprimera votre variable si vous avez exporter édité de la coquille à des sous-traitements .


1 commentaires

Cela fonctionne aussi (et la variable ne doit pas nécessairement être exportée si vous faites ref = valeur awk '...' ). Mais je recommanderais le commutateur -v comme solution générale.