2013-08-06 19 views
5

ricevo il seguente messaggio quando faccio un "ps -ef | grep porta"Analisi ps e grep uscita in guscio

apache 6215  1 0 11:20 ?  00:00:00 perl /scripts/myscript.pl -sn 4123E -sku HSME01-HW -port 8 

C'è un modo per analizzare il seguente:

  • inizio tempo (11:20)
  • sn (4123E)
  • SKU (HSME01-HW)
  • porta (8)
+3

Il "grep" non dovrebbe essere nel titolo, ma questo non è un motivo per -1 un principiante invece di rispondere alla sua domanda! – saeedgnu

+0

È più una questione di "quanti modi diversi ci sono per analizzare l'output" di "c'è un modo per farlo". –

+0

Si potrebbe trovare 'ps -eo start_time, args' un po 'più facile da analizzare –

risposta

7

È possibile utilizzare awk per il filtraggio e l'analisi:

ps -ef | awk '/[p]ort/ {printf "start time: %s\nsn: %s\nsku: %s\nport: %s\n", $5, $11, $13, $NF}' 

Come glenn jackman ha sottolineato nei commenti le parentesi quadre nella stringa di filtro impediscono all'espressione di corrispondere alla stringa del filtro stessa nell'elenco dei processi.

+2

Dal momento che potrebbe anche prendere il comando awk dall'uscita di ps, usare'/[p] ort/'per filtrare –

+0

@glennjackman Buon punto. Fisso. –

+0

Grazie Ansgar. Qualcuno potrebbe spiegarmi a cosa significano o corrispondono i $ 5, $ 11, $ 13, $ NF? – Jeremy

3

Poiché la questione è aggiunto come bash, utilizzando soluzioni bash-solo (senza awk o Perl) è preferita ...

LINE='apache 6215  1 0 11:20 ?  00:00:00 perl /scripts/myscript.pl -sn 4123E -sku HSME01-HW -port 8' 

## Convert string to bash array 
ARR=($LINE) 

echo "start time (${ARR[4]})" 
echo "sn (${ARR[10]})" 
echo "sku (${ARR[12]})" 
echo "port (${ARR[14]})" 

## How to save the value? 
START_TIME=${ARR[4]}