我想首先在第一个字段中对下面的内容进行排序,然后在第三个字段中对日期进行排序。然后只保留每个ID(字段1)的最新值 - 不管第二个字段。
id1,description1,2013/11/20
id2,description2,2013/06/11
id2,description3,2012/10/28
id2,description4,2011/12/04
id3,description5,2014/02/09
id3,description6,2013/12/05
id4,description7,2013/12/05
id5,description8,2013/08/14
所以预期的输出将是
id1,description1,2013/11/20
id2,description2,2013/06/11
id3,description5,2014/02/09
id4,description7,2013/12/05
id5,description8,2013/08/14
由于 绳文
答案 0 :(得分:2)
你可以使用这个awk:
> cat file
id1,description1,2013/11/20
id1,description1,2013/11/19
id2,description2,2013/06/11
id2,description3,2012/10/28
id2,description4,2011/12/04
id3,description5,2014/02/09
id3,description6,2013/12/05
id4,description7,2013/12/05
id5,description8,2013/08/14
> sort -t, -k1,1 -k3,3r file | awk -F, '!a[$1]++'
id1,description1,2013/11/20
id2,description2,2013/06/11
id3,description5,2014/02/09
id4,description7,2013/12/05
id5,description8,2013/08/14
答案 1 :(得分:1)
两次致电sort
;第一次按日期排序。在第二个调用中,对第一个字段进行唯一排序,但要稳定地进行排序,以便具有相同id的项目按日期排序。
sort -t, -k3,3r data.txt | sort -t, -su -k1,1
答案 2 :(得分:0)
试试这个:
cat file |sort -u|awk -F, '{if(map[$1] == ""){print $0; map[$1]="printed"}}'
<强>解释强>:
我使用sort
进行排序(好不可能更简单)
如果已经打印了第一个列项,我使用awk存储在地图中。
如果不是(map [$ 1] ==“”)我打印并将“打印”存储到地图[$ 1]中(所以下次它对于$ 1的当前值不等于“”)。