日期:2014-05-16  浏览次数:20830 次

linux sort 如何删除指定重复列 的行记录? [问题点数:100分]
举个很简单的列子。我只有这样的一个文本数据,还有一些列没有显示出来,大约有500W条数据。文件大小约2G,数据内容如下。
1,2851070,1373762396622
1,2851070,1373764594902
13,2851070,1373762396630
13,2851070,1373764594910
16,2851070,1373762396628
16,2851070,1373764594908
17,2851070,1373764594912
21,2851070,1373762396626
21,2851070,1373764594906
22,2851070,1373764594914
9,2851070,1373762396624
9,2851070,1373764594904

比如
1,2851070,1373762396622
1,2851070,1373764594902
这两条数据第一列和第二列重复,那么我只保留第三列的最大值。
所有只保留1,2851070,1373764594902,
有点象sql语句,
select colum1,colum2,max(colum3) from tb group colum1,colum2
高分求linux命令?求大牛帮忙解决一下
Linux 行业数据

------解决方案--------------------
没有做排序处理,如果你有顺序要求,做一个排序即可:
[seesea@CSDN ~]$ cat file
1,2851070,1373762396622
1,2851070,1373764594902
13,2851070,1373762396630
13,2851070,1373764594910
16,2851070,1373762396628
16,2851070,1373764594908
17,2851070,1373764594912
21,2851070,1373762396626
21,2851070,1373764594906
22,2851070,1373764594914
9,2851070,1373762396624
9,2851070,1373764594904
[seesea@CSDN ~]$ awk -F',' 'ar[$1","$2] < $3 {ar[$1","$2] = $3}; END{for(i in ar) print i "," ar[i]}' file
17,2851070,1373764594912
16,2851070,1373764594908
1,2851070,1373764594902
22,2851070,1373764594914
13,2851070,1373764594910
21,2851070,1373764594906
9,2851070,1373764594904

------解决方案--------------------
试试
awk -F, '{a[$1$2]=$1","$2","$3} END{for(i in a) print a[i]}' yourfile
------解决方案--------------------
sort -t, -k3nr urfile 
------解决方案--------------------
 awk -F, -v OFS=',' '!a[$1,$1]++'

sort -t, -k3nr urfile 
------解决方案--------------------
 awk -F, -v OFS=',' '!a[$1,$1]++'