通过管道从标准输出中对定界日期进行剪切和排序

问题描述

我正在尝试从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 $2}' | 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]/,"")
}
$0 > max {
   max = $0
}
END {
   print max
}' file
20201004033103

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...