Eu tenho um programa que produz uma saída como esta (datas no 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
...
Como faço para converter a saída em datas classificadas e exclusivas:
2010-06-04
2010-02-01
2009-05-02
2009-03-02
E então, em cada data única, execute: mycommand --withargs [yyyy-mm-dd]
?
Responder1
Você pode fazer o seguinte:
$ <iso_command> | awk '{print $1}' | sort -u | xargs -n 1 mycommand --withargs
Responder2
Usar uma ferramenta simples de análise de texto pode não ser o melhor método se você for obter dados de fusos horários alternativos.
Talvez seja melhor colar a string formatada nodatacomando e, em seguida, use-o para reformatar como quiser. Um simples awk ou cut pode retornar resultados que não são totalmente precisos. Por exemplo, se você estivesse em PST, mas os dados obtidos estivessem em UTC, a data estaria errada em 7 em 24 horas durante os dados.
$echo '2010-06-04 15:48:17 +0200' | xargs -I var_d date --date='var_d' +%Y-%m-%d
2010-06-04
Responder3
cut -c 1-10 -|sort -ru
ou
cut -c 1-10 /path/to/myfile |sort -ru
Responder4
Assumindo date
do GNU coreutils,
program > dates
while read isodate; do
ymd=$(date -d "$isodate" +'%Y-%m-%d')
mycommand --withargs "$ymd"
done < dates