如何比较文件linux中的记录并打印最新的

How to compare the records in linux of a file and print the latest

我有以下文件,其中有 4 列,竖线分隔。

09252|20|30|20200426|
09252|20|10|20200406|
09252|30|10|20200427|
09252|10|20|20200327|
12112|10|20|20200530|
04442|20|10|20200612|
52552|20|10|20200614|
04442|10|20|20200530|
52552|10|20|20200530|
12112|20|10|20200613|

我已经使用排序命令对文件进行了如下排序。

排序input.unl

04442|10|20|20200530|                                                                                                       
04442|20|10|20200612|                                                                                                       
09252|10|20|20200327|
09252|20|10|20200406|
09252|20|30|20200426|
09252|30|10|20200427|
12112|10|20|20200530|
12112|20|10|20200613|
52552|10|20|20200530|
52552|20|10|20200614|

我想将该行打印到另一个文件中,该文件具有第 1 列中每个条目的最新日期(第 4 列)。例如,09252 在文件中有 4 个条目,输出文件应仅包含 09252|30|10 |20200427|因为这条记录在 09252 的 4 个条目中是最晚的。

我的预期输出如下

04442|20|10|20200612|
09252|30|10|20200427|
12112|20|10|20200613|
52552|20|10|20200614|

期待您的帮助,

首先,按日期反向排序。然后,按第一列排序并唯一,保持顺序稳定,这样每个id只保留上一次排序的最后一行,即最大日期。

sort -t'|' -rk4,4 file | sort -t'|' -su -k1,1
  • -t 告诉 sort 分隔符是什么。我们需要单引号作为 bare |是管道控制操作符。
  • -k4,4 使用第 4th 列进行排序,即日期
  • -r 表示向后排序,即最新的日期排在最前面
  • -k1,1 表示按第 1st 列排序,即 id
  • -u 表示“唯一”,即仅打印每个 id 的第一次出现
  • -s 表示“稳定”,这意味着排序不会为相同的 id
  • 打乱日期