我有一个程序,它产生如下输出(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,则在数据期间的 24 小时内,日期会偏离 7 小时。
$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