下面是我的输入文件,但我的实际输入有数百万条记录,
004,shan@gmail.com,TAT,0582,live,20180622 06:27:47
004,bb@gmail.com,TAT,0588,live,20180622 06:27:27
004,shan@gmail.com,TAT,0562,live,20180622 06:27:59
004,aa@gmail.com,TAT,0582,inlive,20180622 06:27:47
006,dd@gmail.com,TAT,0582,live,20180622 06:27:47
004,tr@gmail.com,TAT,0582,live,20180622 06:27:47
首先,我想使用第二列(电子邮件)的升序对以上文件进行排序, 其次,我想使用第六列(时间戳)以降序对其进行排序。 第三,我需要删除基于重复的第二列。
预期输出:
004,aa@gmail.com,TAT,0582,inlive,20180622 06:27:47
004,bb@gmail.com,TAT,0588,live,20180622 06:27:27
006,dd@gmail.com,TAT,0582,live,20180622 06:27:47
004,shan@gmail.com,TAT,0562,live,20180622 06:27:59
004,tr@gmail.com,TAT,0582,live,20180622 06:27:47
我尝试了什么,但是我想用单个命令而不是不同的步骤来做所有事情,而且-u不能正确地执行重复删除?
sort -t$'," -k2 pp.txt > pp1.txt
sort -t$'," -k6 -r pp1.txt > pp2.txt
sort -t$'," -k2 -u pp2.txt > pp3.txthere
请帮助
答案 0 :(得分:1)
您应该这样做:
topleftmapbox.on('load', function() {
topleftmapbox.addSource("source_KEWX_REFLECTIVITY_SWEEP0_13", {
"type": "image",
"url": "images/KEWX_Z_SWEEP0_13.gif",
"coordinates": [
[-98.3868664444, 30.062422],
[-97.6698002222,30.062422],
[-97.6698002222, 29.3453557778],
[-98.3868664444, 29.3453557778]
]
})
topleftmapbox.addLayer({
"id": "overlay_KEWX_REFLECTIVITY_SWEEP0_13",
"source": "source_KEWX_REFLECTIVITY_SWEEP0_13",
"type": "raster",
"layout": {"visibility": "none"},
"paint": {
"raster-opacity": 0.99,
}
})
});
结果是:
sort -t, -u -k2,2 pp.txt
答案 1 :(得分:1)
使用gnu awk
,您可以在单个命令中完成此操作:
awk -F, 'BEGIN{PROCINFO["sorted_in"] = "@ind_str_asc"}
!($2 in ts) || $6 > ts[$2] { ts[$2]=$6; row[$2]=$0 }
END { for (i in row) print row[i] }' file
004,aa@gmail.com,TAT,0582,inlive,20180622 06:27:47
004,bb@gmail.com,TAT,0588,live,20180622 06:27:27
006,dd@gmail.com,TAT,0582,live,20180622 06:27:47
004,shan@gmail.com,TAT,0562,live,20180622 06:27:59
004,tr@gmail.com,TAT,0582,live,20180622 06:27:47
条件!($2 in ts) || $6 > ts
具有2个带有OR
子句的子条件。
第一个条件表示在名为$2
的数组中不存在作为关键字的ts
,而第二个条件意味着如果存在$2
则当前时间戳或$6
大于一个出现在数组中(因此,我们可以在最终数组中存储$2
的最大时间戳)
答案 2 :(得分:0)
能否请您尝试以下操作,如果有帮助,请告诉我。
sort -t, -k2,2 -k6,6nr Input_file | awk -F, '!a[$2]++'
答案 3 :(得分:0)
GNU sort
:
sort -t, -k2,2 -k6,6nr -u pp.txt
输出:
004,aa@gmail.com,TAT,0582,inlive,20180622 06:27:47
004,bb@gmail.com,TAT,0588,live,20180622 06:27:27
006,dd@gmail.com,TAT,0582,live,20180622 06:27:47
004,shan@gmail.com,TAT,0582,live,20180622 06:27:47
004,tr@gmail.com,TAT,0582,live,20180622 06:27:47