需要根据第三列中的最新日期获取单个记录

需要根据第三列中的最新日期获取单个记录

我想为第一列中的每个值获取一条记录,下面的三个记录的最新日期值为 2019-10-20,在这种情况下,首先我们获取三行,然后是最后一列的最新日期2019-10-14 所以我们得到该记录作为输出

输入:

150098517|000000601706|2019-10-19|2019-10-10|1265457733|2019-01-13
150098517|000000635671|2019-10-20|2019-10-20|1265457733|2019-01-13
150098517|000000637002|2019-10-20|2019-10-19|1265457733|2019-01-14
150098517|000000645047|2019-10-20|2019-10-18|1265457733|2019-01-12
150096747|000000645048|2019-10-17|2019-10-17|1265457733|2019-01-13
150098555|000000645194|2019-10-18|2019-10-16|1265457733|2019-01-13
150098554|000000645194|2019-10-18|2019-10-16|1265457733|2019-01-13
150098523|000000645194|2019-10-18|2019-10-16|1265457733|2019-01-13
150098523|000000645194|2019-10-14|2019-10-16|1265457733|2019-01-13

输出:

150098517|000000637002|2019-10-20|2019-10-19|1265457733|2019-01-14
150096747|000000645048|2019-10-17|2019-10-17|1265457733|2019-01-13
150098555|000000645194|2019-10-18|2019-10-16|1265457733|2019-01-13
150098554|000000645194|2019-10-18|2019-10-16|1265457733|2019-01-13
150098523|000000645194|2019-10-18|2019-10-16|1265457733|2019-01-13

谢谢,艾哈迈德

答案1

假设您的数据位于名为的文件中file

$ sort -t '|' -k3,3r -k6,6r file | sort -t '|' -u -k1,1
150096747|000000645048|2019-10-17|2019-10-17|1265457733|2019-01-13
150098517|000000637002|2019-10-20|2019-10-19|1265457733|2019-01-14
150098523|000000645194|2019-10-18|2019-10-16|1265457733|2019-01-13
150098554|000000645194|2019-10-18|2019-10-16|1265457733|2019-01-13
150098555|000000645194|2019-10-18|2019-10-16|1265457733|2019-01-13

首先按相反顺序对第三个分隔字段上的数据进行排序|(最近的日期在前)。对于相等的日期,第 6 个字段用于排序。

第一次调用的中间结果sort如下所示:

150098517|000000637002|2019-10-20|2019-10-19|1265457733|2019-01-14
150098517|000000635671|2019-10-20|2019-10-20|1265457733|2019-01-13
150098517|000000645047|2019-10-20|2019-10-18|1265457733|2019-01-12
150098517|000000601706|2019-10-19|2019-10-10|1265457733|2019-01-13
150098523|000000645194|2019-10-18|2019-10-16|1265457733|2019-01-13
150098554|000000645194|2019-10-18|2019-10-16|1265457733|2019-01-13
150098555|000000645194|2019-10-18|2019-10-16|1265457733|2019-01-13
150096747|000000645048|2019-10-17|2019-10-17|1265457733|2019-01-13
150098523|000000645194|2019-10-14|2019-10-16|1265457733|2019-01-13

然后,其结果在第一个字段上排序,同时删除在第一个字段中重复的行。由于进入第二个排序的数据是根据第三个和第六个字段中的日期进行排序的,因此作为重复项被丢弃的行将具有较早的日期。

相关内容