在 UNIX 中获取最新日期

Get the latest date in UNIX

我有这样的数据:

Code Date(YYYYDDMM)
VNM 20141202  
VNM 20141203 
VNM 20141204 
BHR 20141203 
BHR 20141204 
RUS 20150312
RUS 20142312

现在我想 select VNM 使用 UNIX 命令获得最新日期。

我该怎么做?

我会使用 awk 将日期转换为时间戳,然后将它们与 sort 进行比较,最后从最大的列开始打印第一列:

awk 'NR>1{y=substr(,0,4)
          d=substr(,5,2)
          m=substr(,7,2)
          date=sprintf("%d %d %d 0 0 0",y,m,d)
          print , mktime(date)}' a |\
sort -k2 -n |\
awk 'END {print }'

请注意,当前日期采用 YYYYDDMM 格式,这就是为什么我必须反转它们才能调用 mktime

逐步测试

$ awk 'NR>1{y=substr(,0,4); d=substr(,5,2); m=substr(,7,2); date=sprintf("%d %d %d 0 0 0",y,m,d); print , mktime(date)}' a
VNM 1392159600
VNM 1394578800
VNM 1397253600
BHR 1394578800
BHR 1397253600
RUS 1449097200
RUS 1419289200
$ awk 'NR>1{y=substr(,0,4); d=substr(,5,2); m=substr(,7,2); date=sprintf("%d %d %d 0 0 0",y,m,d); print , mktime(date)}' a | sort -k2 -n 
VNM 1392159600
BHR 1394578800
VNM 1394578800
BHR 1397253600
VNM 1397253600
RUS 1419289200
RUS 1449097200
$ awk 'NR>1{y=substr(,0,4); d=substr(,5,2); m=substr(,7,2); date=sprintf("%d %d %d 0 0 0",y,m,d); print , mktime(date)}' a | sort -k2 -n | awk 'END {print }'
RUS