2010-08-10 15 views
5

Quindi ho bisogno di convertire una data in un formato diverso. Con una pipeline bash, sto prendendo la data dall'ultimo login da console, e tirando i bit rilevanti con awk, in questo modo:Come utilizzare l'output da awk in un altro comando?

last $USER | grep console | head -1 | awk '{print $4, $5}' 

quali uscite: Aug 08 ($ 4 = agosto $ 5 = 08, in questo caso.)

Ora, voglio prendere "08 agosto" e inserirlo in un comando date per modificare il formato in una data numerica.

Che sarebbe simile a questa:

date -j -f %b\ %d Aug\ 08 +%m-%d 

Uscite: 08-08

La domanda che ho è, Come faccio ad aggiungere che alla mia pipeline e utilizzare le variabili awk $ 4 e $ 5 ove '08 agosto' è in quel comando data?

+0

si sta effettivamente chiedendo come utilizzare l'output * * da awk, non le variabili, nell'altro comando. – Cascabel

+0

Quale versione di 'date' (e del sistema operativo, ecc.)? La data di GNU non ha '-j' e usa' -f' per leggere da un file. Il tuo comando sarebbe 'date -d Ago \ 08 +% m-% d' –

+0

Non sicuro del numero esatto della versione - non ha alcun tipo di output --version. È una build BSD su Mac OSX, quindi ho messo insieme le opzioni di data basate sulla pagina man su OS X 10.6. Solo con l'intenzione di eseguire lo script sui client Mac, ma grazie per le informazioni; sarà utile se dovessi fare qualcosa di simile su Linux. –

risposta

5

Hai solo bisogno di utilizzare la sostituzione di comando:

date ... $(last $USER | ... | awk '...') ... 

Bash valuterà il comando/'interno del $(...) e inserire il risultato lì.

+0

Perfetto, funziona come un fascino! –

0

Immagino che l'abbia già provato?

0

L'utilizzo di back tick dovrebbe funzionare per ottenere l'output della pipeline lunga in data.

 
date -j -f %b\ %d \`last $USER | grep console | head -1 | awk '{print $4, $5}'\` +%b-%d 
+1

In questo caso potrebbe non essere importante, ma in generale è molto meglio usare '$ (...)' di quelli inversi. Può essere annidato. – Cascabel

3

Get awk chiamare date:

... | awk '{system("date -j -f %b\ %d \"" $4 $5 "\" +%b-%d")}' 

o un processo di sostituzione utilizzo per recuperare l'output da awk:

date -j -f %b\ %d "$(... | awk '{print $4, $5}')" +%b-%d 
Problemi correlati