通过管道从stdout中剪切和排序分隔的日期



我正试图从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

应该获得第二个日期(从.到.之后(,而不是第一个,并且只打印最新日期: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

最新更新