通过管道从标准输出中剪切和排序分隔日期

Cut and sort delimited dates from stdout via pipe

我正在尝试从 stdout 中拆分一些字符串以从中获取日期,但我有两种情况

full.20201004T033103Z.vol93.difftar.gz
full.20201007T033103Z.vol94.difftar.gz

应该产生:20201007T033103Z,这是离现在最近的日期(最新)

或:

inc.20200830T033103Z.to.20200906T033103Z.vol1.difftar.gz
inc.20200929T033103Z.to.20200908T033103Z.vol10.difftar.gz

应该获取第二个日期(.to. 之后)而不是第一个日期,并且只打印最新的日期:20200908T033103Z

我试过的:

cat dates_file | awk -F '.to.' 'NF > 1 {print }' | cut -d\. -f1 | sort -r -t- -k3.1,3.4 -k2,2 | head -1

这只适用于第二种情况,不包括第一种情况,而且我不确定日期排序逻辑。

这是一个样本数据

full.20201004T033103Z.vol93.difftar.gz
full.20201004T033103Z.vol94.difftar.gz
full.20201004T033103Z.vol95.difftar.gz
full.20201004T033103Z.vol96.difftar.gz
full.20201004T033103Z.vol97.difftar.gz
full.20201004T033103Z.vol98.difftar.gz
full.20201004T033103Z.vol99.difftar.gz
inc.20200830T033103Z.to.20200906T033103Z.manifest
inc.20200830T033103Z.to.20200906T033103Z.vol1.difftar.gz
inc.20200830T033103Z.to.20200906T033103Z.vol10.difftar.gz
inc.20200830T033103Z.to.20200906T033103Z.vol11.difftar.gz
inc.20200830T033103Z.to.20200906T033103Z.vol12.difftar.gz
inc.20200830T033103Z.to.20200906T033103Z.vol13.difftar.gz
inc.20200830T033103Z.to.20200906T033103Z.vol14.difftar.gz
inc.20200830T033103Z.to.20200906T033103Z.vol15.difftar.gz
inc.20200830T033103Z.to.20200906T033103Z.vol16.difftar.gz
inc.20200830T033103Z.to.20200906T033103Z.vol17.difftar.gz

要从样本数据中获取最新数据,您可以使用此 awk:

awk '{
   sub(/^(.*\.to|[^.]+)\./, "")
   gsub(/\..+$|[TZ]/, "")
}
[=10=] > max {
   max = [=10=]
}
END {
   print max
}' file
20201004033103