bash: convierte fechas iso a d:m:y

bash: convierte fechas iso a d:m:y

Tengo un programa que produce resultados como este (fechas en formato ISO):

2010-06-04 15:48:17 +0200
2010-06-04 12:34:39 +0200
2010-02-01 14:02:44 +0200
2010-06-04 12:21:19 +0200
2010-06-04 12:21:04 +0200
2009-05-02 15:38:14 +0200
2009-03-02 15:38:09 +0200
2010-06-04 14:45:00 +0200
...

¿Cómo convierto la salida en fechas únicas y ordenadas?

2010-06-04
2010-02-01
2009-05-02
2009-03-02

Y luego, en cada fecha única: mycommand --withargs [yyyy-mm-dd]?

Respuesta1

Puedes hacer lo siguiente:

$ <iso_command> | awk '{print $1}' | sort -u | xargs -n 1 mycommand --withargs

Respuesta2

Es posible que utilizar una herramienta simple de análisis de texto no sea el mejor método si alguna vez va a obtener datos de zonas horarias alternativas.

Puede ser mejor pasar la cadena formateada alfechacomando y luego úselo para reformatearlo como desee. Un simple awk o corte podría arrojar resultados que no sean del todo precisos. Por ejemplo, si estaba en PST pero los datos que obtuvo estaban en UTC, la fecha estaría desfasada en 7 de las 24 horas durante los datos.

$echo '2010-06-04 15:48:17 +0200' | xargs -I var_d date --date='var_d' +%Y-%m-%d
2010-06-04

Respuesta3

cut -c 1-10 -|sort -ru

o

cut -c 1-10 /path/to/myfile |sort -ru

Respuesta4

Asumiendo datede GNU coreutils,

program > dates
while read isodate; do
    ymd=$(date -d "$isodate" +'%Y-%m-%d')
    mycommand --withargs "$ymd"
done < dates

información relacionada