如何比较文件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 打乱日期
我有以下文件,其中有 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 打乱日期