Linux 排序并删除重复项

Linux 排序并删除重复项,linux,bash,awk,gawk,Linux,Bash,Awk,Gawk,你能帮我解决这个问题吗 我想对第1、2列进行排序,以便能够删除第1列中的重复项,始终保留前2条记录 排序的目的是使第二列中的差异数不相同 范例 我知道了 3039949085;**19**;1195616938480000;1 ;V2 3039949085;**19**;1195616938480000;2 ;V2 3039949085;**30**;1195616938480000;2 ;V2 之后应进行排序 3039949085;**19**;1195616938480000;1

你能帮我解决这个问题吗

我想对第1、2列进行排序,以便能够删除第1列中的重复项,始终保留前2条记录

排序的目的是使第二列中的差异数不相同

范例

我知道了

3039949085;**19**;1195616938480000;1  ;V2
3039949085;**19**;1195616938480000;2  ;V2
3039949085;**30**;1195616938480000;2  ;V2
之后应进行排序

3039949085;**19**;1195616938480000;1  ;V2
3039949085;**30**;1195616938480000;2  ;V2
3039949085;**19**;1195616938480000;2  ;V2
我使用这个代码

sort -t';' -k1,2n -k4 file | gawk -F';' 'a[$1]++<2
我得到的输出

2995347947;6;1195617034732000;1  ;V3
2995347947;9;1195617034732000;1  ;V3
3039948773;14;1195616284532000;1  ;V2
3039948785;14;1195616747632000;1  ;V2
3039948785;25;1195616747632000;1  ;V2
3039949061;19;1195615542032000;1  ;V2
3039949061;19;1195615542032000;2  ;V2
3039949073;19;1195616109632000;1  ;V2
3039949073;19;1195616109632000;2  ;V2
3039949085;19;1195616938480000;1  ;V2
3039949085;19;1195616938480000;2  ;V2
3039949373;10;1195615559208000;1  ;V2
3039949373;11;1195615559208000;1  ;V2
但我希望得到以下输出

2995347947;6;1195617034732000;1  ;V3
2995347947;9;1195617034732000;1  ;V3
3039948773;14;1195616284532000;1  ;V2
3039948785;14;1195616747632000;1  ;V2
3039948785;25;1195616747632000;1  ;V2
3039949061;19;1195615542032000;1  ;V2
3039949061;30;1195615542032000;2  ;V2
3039949073;19;1195616109632000;1  ;V2
3039949073;30;1195616109632000;2  ;V2
3039949085;30;1195616938480000;2  ;V2
3039949085;19;1195616938480000;1  ;V2
3039949373;10;1195615559208000;1  ;V2
3039949373;11;1195615559208000;1  ;V2
我的问题在排序步骤


感谢您的帮助。

您可以使用此awk打印独特的$1、$2:

完整示例:

sort -t';' -k1,2n -k4 file | awk -F';' '!a[$1,$2]++'

2995347947;6;1195617034732000;1  ;V3
2995347947;9;1195617034732000;1  ;V3
3039948773;14;1195616284532000;1  ;V2
3039948785;14;1195616747632000;1  ;V2
3039948785;25;1195616747632000;1  ;V2
3039949061;19;1195615542032000;1  ;V2
3039949061;30;1195615542032000;2  ;V2
3039949073;19;1195616109632000;1  ;V2
3039949073;30;1195616109632000;2  ;V2
3039949085;19;1195616938480000;1  ;V2
3039949085;30;1195616938480000;2  ;V2
3039949373;10;1195615559208000;1  ;V2
3039949373;11;1195615559208000;1  ;V2

您可以使用此awk打印$1、$2的唯一集:

完整示例:

sort -t';' -k1,2n -k4 file | awk -F';' '!a[$1,$2]++'

2995347947;6;1195617034732000;1  ;V3
2995347947;9;1195617034732000;1  ;V3
3039948773;14;1195616284532000;1  ;V2
3039948785;14;1195616747632000;1  ;V2
3039948785;25;1195616747632000;1  ;V2
3039949061;19;1195615542032000;1  ;V2
3039949061;30;1195615542032000;2  ;V2
3039949073;19;1195616109632000;1  ;V2
3039949073;30;1195616109632000;2  ;V2
3039949085;19;1195616938480000;1  ;V2
3039949085;30;1195616938480000;2  ;V2
3039949373;10;1195615559208000;1  ;V2
3039949373;11;1195615559208000;1  ;V2

你说你只想保留两个第一列相等的第一个记录,但在你的示例输出中我看到了3039949061 3次。这是一个错误,应该只保留2次编辑你的问题,不要把它写在评论中。你说你只想保留2个第一个列的第一个记录,但是在你的样本输出中,我看到了3039949061个3个时间。这是一个错误,应该只有2个时间来编辑你的问题,不要写在评论中。@ USER 734 334如果这个或任何答案已经解决了你的问题,请通过点击复选标记来考虑。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。没有义务这样做。@ USER,如果你的答案已经解决了你的问题,请点击复选标记。这向更广泛的社区表明,你已经找到了一个解决方案,并给回答者和你自己带来了一些声誉。没有义务这样做。
sort -t';' -k1,2n -k4 file | awk -F';' '!a[$1,$2]++'

2995347947;6;1195617034732000;1  ;V3
2995347947;9;1195617034732000;1  ;V3
3039948773;14;1195616284532000;1  ;V2
3039948785;14;1195616747632000;1  ;V2
3039948785;25;1195616747632000;1  ;V2
3039949061;19;1195615542032000;1  ;V2
3039949061;30;1195615542032000;2  ;V2
3039949073;19;1195616109632000;1  ;V2
3039949073;30;1195616109632000;2  ;V2
3039949085;19;1195616938480000;1  ;V2
3039949085;30;1195616938480000;2  ;V2
3039949373;10;1195615559208000;1  ;V2
3039949373;11;1195615559208000;1  ;V2