2013-09-06 32 views
15

Qualcuno può aiutarmi con questo problema?Salvataggio dell'output awk alla variabile

Sto provando a salvare l'output di awk in una variabile.

variable = `ps -ef | grep "port 10 -" | grep -v "grep port 10 -"| awk '{printf "%s", $12}'` 
printf "$variable" 

MODIFICA: $ 12 corrisponde a un parametro in esecuzione su tale processo.

Grazie!

+0

quindi qual è il tuo output quando hai eseguito questo script di shell? – wens

+0

Il problema non è chiaro. Qual è l'errore che ottieni? Qual è la linea da 'ps -ef' e cosa ti aspetti in $ variabile? (se non è possibile fornire dati reali, generare un esempio sterilizzato che mostri invece il problema). – NiKiZe

+0

Problema: la variabile non viene visualizzata nell'istruzione printf. End goal: $ 12 corrisponde a un numero seriale in esecuzione con tale processo. Voglio salvare quel parametro in una variabile in modo che possa lavorare con esso. – Jeremy

risposta

22
#!/bin/bash 

variable=`ps -ef | grep "port 10 -" | grep -v "grep port 10 -" | awk '{printf $12}'` 
echo $variable 

Si noti che non c'è spazio dopo il segno di uguale.

È inoltre possibile utilizzare $() che consente il nesting ed è leggibile.

+0

grazie a RUI e NiKiZe, è stata la spaziatura prima e dopo il segno di uguale. – Jeremy

8

penso che la sintassi $() è più facile da leggere ...

variable=$(ps -ef | grep "port 10 -" | grep -v "grep port 10 -"| awk '{printf "%s", $12}') 

Ma il vero problema è probabilmente che $12 non dovrebbe essere qouted con ""

Redatta da quando la questione è stata modificata , Ciò restituisce i dati validi, ma non è chiaro quale sia l'output previsto di ps -ef e cosa è previsto nella variabile.

+0

Dovrebbe esserci un 'awk' dopo l'ultima pipe e prima di' '{printf'. Probabilmente è stato rimosso per errore quando la risposta è stata modificata. – aDroid

1

come indicato in precedenza, l'impostazione delle variabili di bash non consente spazi bianchi tra il nome della variabile sul LHS e il valore della variabile sul RHS, del segno '='.

awk può fare tutto ed evitare il reparto "awk" extra 'grep'. L'uso di awk's printf è di non aggiungere un inutile "\ n" nella stringa che darebbe connotazioni di programmi perl-ish matcher. Il/espansione di parametro variabile per il vostro caso in bash non ha questo problema, così uno di questi lavori:

variable=$(ps -ef | awk '/port 10 \-/ {print $12}') 

variable=`ps -ef | awk '/port 10 \-/ {print $12}'` 

Il '-' int il modello awk record corrispondente elimina la necessità di rimuovere awk sé dalla ricerca risultati.

0
variable=$(ps -ef | awk '/[p]ort 10/ {print $12}') 

Il [p] è un trucco per rimuovere la ricerca di mostrare da ps

@Jeremy Se pubblichi l'uscita di ps -ef | grep "port 10", e quello che ti serve dalla linea, sarebbe più facile ti aiuta a ottenere la sintassi corretta

Problemi correlati