2010-03-22 2 views
8

Per illustrare il mio problema,Tubazioni una variabile bash in awk e memorizzare l'uscita

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

quello che mi aspetterei questo da fare è passare la variabile $ TEST in awk e memorizzare il 3 ° parola nel $ OUTP.

Invece ho "Ciao: non trovato", come se si aspettasse che l'input fosse un file. Se passo una stringa invece di una variabile, tuttavia, non ci sono problemi. Quale sarebbe il modo migliore per avvicinarsi a questo?

Grazie a tutti!

+0

tutto funziona bene per me! – Vijay

+0

Stai utilizzando i backtick da assegnare a TEST. Copia e incolla dallo script che dà l'errore –

risposta

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

nice use di 'set --' –

+0

Questo sembra funzionare nel prompt dei comandi, ma quando viene eseguito come script di shell ottengo ancora Hi: non trovato. Qualche modo per risolvere questo problema? Grazie! –

+0

EDIT: Nevermind, stavo mettendo uno spazio extra prima di $ quando si imposta la variabile. Grazie mille per l'aiuto! –

1

Come con gli altri, questo funziona per me così come sono, ma forse l'aggiunta di virgolette (") intorno $TEST in linea 2 aiuterebbe. In caso contrario, potrebbero essere utili informazioni più specifiche sul sistema su cui si sta eseguendo bash.

0

Un modo per riprodurre un comportamento simile:

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

In una sola riga:

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