获取UNIX中的最新日期

时间:2015-02-19 11:46:06

标签: date unix unixodbc

我有这样的数据:

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

现在我想使用UNIX命令选择具有最新日期的VNM

我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

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

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

请注意,当前日期采用YYYYDDMM格式,这就是为什么我必须将其撤消以致电mktime

逐步测试

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