使用Bash对数组中的日期进行排序

时间:2013-01-30 11:59:10

标签: arrays bash shell sorting

我正在为一些自动化编写一个bash脚本,我似乎无法找到对包含日期的数组进行排序的最佳方法。

示例数组:

dates=('180212', '110112', '040312')

输出应如下:

110112
180212
040312

我尝试使用sort,但它只是将它排序为整数。

有人可以建议使用最好的方法吗?它不一定要排序,我只需要数组中最早的日期。

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以交换年份和日期数字,并使用sort对结果值进行排序。然后取最旧的值并撤消交换。您可以像这样使用sed进行交换:

echo 112233 | sed 's/\(..\)\(..\)\(..\)/\3\2\1/'

这将前两个与最后两位数字交换。

答案 1 :(得分:1)

bash-script示例:

dates="180212 110112 040312"
min="999999"
for d in $dates
do
    rdate="${d:4}${d:2:2}${d:0:2}"
    if [ "$min" -gt "$rdate" ]
    then
        min=$rdate
    fi
done

min="${min:4}${min:2:2}${min:0:2}"
echo $min

仅适用于ddmmyy的日期。我们的想法是以yymmdd格式反转日期,然后找到最小值。 bash的工作。虽然不漂亮。