2010-08-10 18 views
5

Así que necesito convertir una fecha a un formato diferente. Con una tubería de fiesta, estoy tomando la fecha de la última entrada de la consola, y tirando de los bits correspondientes a cabo con awk, así:¿Cómo uso la salida de awk en otro comando?

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

que da salida: Aug 08 ($ 4 = agosto $ 5 = 08, en este caso.)

Ahora, quiero tomar 'Aug 08' y ponerlo en un comando date para cambiar el formato a una fecha numérica.

Qué sería algo como esto:

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

Salidas: 08-08

La pregunta que tengo es, ¿cómo puedo añadir que a mi tubería y utilizar las variables awk $ 4 y $ 5 en la que 'Aug 08' está en ese comando de fecha?

+0

en realidad estás preguntando cómo utilizar la salida * * desde awk, no las variables, en el otro comando. – Cascabel

+0

¿Qué versión de 'date' (y el sistema operativo, etc.)? La fecha GNU no tiene '-j' y usa' -f' para leer desde un archivo. Su comando sería 'date -d Aug \ 08 +% m-% d' –

+0

No estoy seguro del número de versión exacto - no tiene ningún tipo de --version de salida. Es una compilación de BSD en Mac OSX, así que reuní las opciones de fecha basadas en la página de manual en OS X 10.6. Solo con la intención de ejecutar el script en mac clients, pero gracias por la información; será útil si necesito hacer algo similar en Linux. –

Respuesta

5

sólo tiene que utilizar el comando substitución:

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

Bash evaluará el comando/tubería dentro de la $(...) y colocar el resultado allí.

+0

Perfecto, funciona como un encanto! –

0

Supongo que ya has intentado esto?

last $USER | grep console | head -1 | awk | date -j -f %b\ %d $4 $5 +%b-%d 
0

El uso de marcas de retroceso debería ser útil para obtener la salida de la tubería larga hasta la fecha.

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

Puede que no importe en este caso, pero en general es mucho mejor usar '$ (...)' que los backticks. Puede ser anidado. – Cascabel

3

Obtener awk llamar date:

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

O proceso de sustitución de uso para recuperar la salida de awk:

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