Eu tenho um arquivo com várias linhas, aqui está como ele se parece (apenas um cabeçalho de arquivo):
"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
....
Existem algumas linhas idênticas (o mesmo par de genes, apenas a ordem das posições inicial e final diferem, mas são exatamente as mesmas) que preciso remover a linha repetida. Por exemplo:
1 315121 317607 "gene2" 315521 317204 "gene3" 1684
1 315521 317204 "gene3" 315121 317607 "gene2" 1684
são os mesmos, é a combinação dos genes 2 e 3 apenas em uma ordem diferente e quero remover um deles.
Aqui está minha saída desejada:
"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
Tem alguma ideia de como posso fazer essa tarefa? Obrigado
Você pode tentar:
Isso armazena o mínimo necessário para remover os registros duplicados.
!seen[key]++
é um idioma awk "famoso" para imprimir um registro apenas pela primeira vez que "chave" é vista.Você pode ordenar os trigêmeos das colunas 2-3-4 e 5-6-7 pelo valor na primeira coluna:
Então você pode simplesmente executar
sort -u
para remover as duplicidades (mas você precisa de maiúsculas e minúsculas nos nomes das colunas).Assegurando em cada linha:
pelo gnu sed, seus dados no arquivo 'data';