2010-03-22 10 views
8

Pour illustrer mon problème,Piping une variable bash dans awk et stocker la sortie

TEST="Hi my name is John" 
OUTP=`echo $TEST | awk '{print $3}'` 
echo $OUTP 

Ce que je m'y attendais à faire est de passer la variable $ test en awk et stocker le 3ème mot dans $ SORT. Au lieu de cela, je reçois "Hi: not found", comme si on attendait que l'entrée soit un fichier. Si je passe juste une chaîne au lieu d'une variable, il n'y a pas de problème. Quelle serait la meilleure façon d'aborder cela?

Merci à tous!

+0

cela fonctionne bien pour moi! – Vijay

+0

Utilisez-vous des backticks pour assigner à TEST. Copier et coller à partir du script qui donne l'erreur –

Répondre

17
#!/bin/bash 
TEST="Hi my name is John" 
set -- $TEST 
echo $3 

#!/bin/bash 
TEST="Hi my name is John" 
var=$(echo $TEST|awk '{print $3}') 
echo $var 
+0

bonne utilisation de 'set --' –

+0

Cela semble fonctionner dans l'invite de commande, mais lorsqu'il est exécuté en tant que script shell, je reçois toujours Salut: pas trouvé. Aucun moyen de réparer cela? Merci beaucoup! –

+0

EDIT: Nevermind, je mettais un espace supplémentaire avant le $ lors de la définition de la variable. Merci beaucoup pour l'aide! –

1

Comme avec les autres, cela fonctionne pour moi-est, mais peut-être ajouter des guillemets doubles (") autour $TEST en ligne 2 aiderait. Sinon, des informations plus spécifiques sur le système sur lequel vous exécutez bash peuvent vous aider.

0

Une façon de reproduire le même comportement:

$ alias echo='echo;' 
$ echo Hi 
Hi: command not found 
$ alias 
alias echo='echo;' 
$ unalias echo 
$ echo Hi 
Hi 
4

en une ligne:

echo $(echo "Hi my name is John" | awk '{print $3}') 
Questions connexes