我有这样的数据:
Code Date(YYYYDDMM)
VNM 20141202
VNM 20141203
VNM 20141204
BHR 20141203
BHR 20141204
RUS 20150312
RUS 20142312
现在我想使用UNIX命令选择具有最新日期的VNM
。
我怎么能这样做?
答案 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