排序并删除重复项
Sort and remove duplicates
请你帮我解决这个问题。
我想对第 1、2 列进行排序,以便能够删除第 1 列中的重复项,始终保留前 2 条记录。
排序中的objective是为了保持第二列diff数不一样
例子
我知道了
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[]++<2
我的输入文件是:
2995347947;6;1195617034732000;1 ;V3
2995347947;9;1195617034732000;1 ;V3
2995347947;6;1195617034732000;2 ;V3
2995347947;9;1195617034732000;2 ;V3
3039948773;14;1195616284532000;1 ;V2
3039948785;14;1195616747632000;1 ;V2
3039948785;25;1195616747632000;1 ;V2
3039948785;14;1195616747632000;2 ;V2
3039948785;25;1195616747632000;2 ;V2
3039949061;19;1195615542032000;1 ;V2
3039949061;19;1195615542032000;2 ;V2
3039949061;30;1195615542032000;2 ;V2
3039949073;19;1195616109632000;1 ;V2
3039949073;19;1195616109632000;2 ;V2
3039949073;30;1195616109632000;2 ;V2
3039949085;19;1195616938480000;1 ;V2
3039949085;19;1195616938480000;2 ;V2
3039949085;30;1195616938480000;2 ;V2
3039949373;10;1195615559208000;1 ;V2
3039949373;11;1195615559208000;1 ;V2
3039949373;10;1195615559208000;2 ;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;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 打印独特的 ,
集:
awk -F';' '!a[,]++'
完整示例:
sort -t';' -k1,2n -k4 file | awk -F';' '!a[,]++'
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
请你帮我解决这个问题。
我想对第 1、2 列进行排序,以便能够删除第 1 列中的重复项,始终保留前 2 条记录。
排序中的objective是为了保持第二列diff数不一样
例子
我知道了
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[]++<2
我的输入文件是:
2995347947;6;1195617034732000;1 ;V3
2995347947;9;1195617034732000;1 ;V3
2995347947;6;1195617034732000;2 ;V3
2995347947;9;1195617034732000;2 ;V3
3039948773;14;1195616284532000;1 ;V2
3039948785;14;1195616747632000;1 ;V2
3039948785;25;1195616747632000;1 ;V2
3039948785;14;1195616747632000;2 ;V2
3039948785;25;1195616747632000;2 ;V2
3039949061;19;1195615542032000;1 ;V2
3039949061;19;1195615542032000;2 ;V2
3039949061;30;1195615542032000;2 ;V2
3039949073;19;1195616109632000;1 ;V2
3039949073;19;1195616109632000;2 ;V2
3039949073;30;1195616109632000;2 ;V2
3039949085;19;1195616938480000;1 ;V2
3039949085;19;1195616938480000;2 ;V2
3039949085;30;1195616938480000;2 ;V2
3039949373;10;1195615559208000;1 ;V2
3039949373;11;1195615559208000;1 ;V2
3039949373;10;1195615559208000;2 ;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;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 打印独特的 ,
集:
awk -F';' '!a[,]++'
完整示例:
sort -t';' -k1,2n -k4 file | awk -F';' '!a[,]++'
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