我有一个包含一堆行的文件,这是它的样子(只是一个文件头):
"chrom" "startA" "stopA" "genesA" "startB" "stopB" "genesB" "test"
1 315121 317607 "gene2" 315521 317204 "gene3" 1684
1 315521 317204 "gene3" 315121 317607 "gene2" 1684
1 407644 408993 "gene4" 408421 409504 "gene5" 573
1 407644 408993 "gene4" 408616 410013 "gene6" 378
1 408421 409504 "gene5" 407644 408993 "gene4" 573
1 408421 409504 "gene5" 408616 410013 "gene6" 889
1 408616 410013 "gene6" 407644 408993 "gene4" 378
1 408616 410013 "gene6" 408421 409504 "gene5" 889
1 408616 410013 "gene6" 409682 411483 "gene7" 332
....
有一些相同的行(同一对基因,只是开始和停止位置的顺序不同,但它们完全相同)我需要删除重复的行。例如:
1 315121 317607 "gene2" 315521 317204 "gene3" 1684
1 315521 317204 "gene3" 315121 317607 "gene2" 1684
是相同的,它是基因 2 和 3 的组合,只是顺序不同,我想删除其中一个。
这是我想要的输出:
"chrom" "startA" "stopA" "genesA" "startB" "stopB" "genesB" "test"
1 315121 317607 "gene2" 315521 317204 "gene3" 1684
1 407644 408993 "gene4" 408421 409504 "gene5" 573
1 407644 408993 "gene4" 408616 410013 "gene6" 378
1 408421 409504 "gene5" 408616 410013 "gene6" 889
1 408616 410013 "gene6" 409682 411483 "gene7" 332
有什么想法我可以完成这项任务吗?谢谢
你可以试试:
它存储了删除重复记录所需的最小值。
!seen[key]++
是一个“著名的” awk 习语,仅在第一次看到“key”时才打印记录。您可以按第一列中的值对 2-3-4 和 5-6-7 列的三元组进行排序:
然后您可以运行
sort -u
以删除重复项(但您需要对列名进行特殊处理)。保证每一行:
通过 gnu sed,您在“数据”文件中的数据;