У меня есть программа, которая выдает такой вывод (даты в формате 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
...
Как преобразовать вывод в уникальные отсортированные даты:
2010-06-04
2010-02-01
2009-05-02
2009-03-02
И затем, в каждую уникальную дату запуска: mycommand --withargs [yyyy-mm-dd]
?
решение1
Вы можете сделать следующее:
$ <iso_command> | awk '{print $1}' | sort -u | xargs -n 1 mycommand --withargs
решение2
Использование простого инструмента для синтаксического анализа текста может оказаться не лучшим методом, если вы собираетесь получать данные из других часовых поясов.
Возможно, лучше вставить отформатированную строку вдатакоманду, а затем используйте ее, переформатируйте так, как вам нравится. Простой awk или cut может вернуть не совсем точные результаты. Например, если вы находитесь в PST, но данные, которые вы получили, были в UTC, дата будет отличаться на одну 7 из 24 часов в течение данных.
$echo '2010-06-04 15:48:17 +0200' | xargs -I var_d date --date='var_d' +%Y-%m-%d
2010-06-04
решение3
cut -c 1-10 -|sort -ru
или
cut -c 1-10 /path/to/myfile |sort -ru
решение4
Предполагая date
из GNU coreutils,
program > dates
while read isodate; do
ymd=$(date -d "$isodate" +'%Y-%m-%d')
mycommand --withargs "$ymd"
done < dates