在 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
我有这样的数据:
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