Apaga tudo na segunda coluna, não entre parênteses

2

Eu tenho um arquivo assim:

gene ID              protein
Solyc06g062540    (Z) PYROPHOSPHATASE 3 (PTHR20889:SF0)
Solyc10g075050    ALBUMIN SUPERFAMILY (PTHR33076:SF11)
Solyc07g061760    SUBFAMILY (PTHR24177:SF35)

O arquivo é delimitado por tabulações; existe uma tabulação entre a primeira coluna (ID do gene) e a segunda coluna (nome da proteína). (O nome da proteína pode conter espaços, mas não guias.) O nome da proteína contém uma string entre parênteses, por exemplo, (PTHR33076:SF11) ; esta é a proteína ID . Eu quero manter a primeira coluna e excluir tudo na segunda coluna, exceto a ID da proteína (e seus parênteses). Então, a saída ficaria assim:

Solyc06g062540    (PTHR20889:SF0)
Solyc10g075050    (PTHR33076:SF11)
Solyc07g061760    (PTHR24177:SF35)

Como posso fazer isso? Eu tinha marcado todos os IDs entre parênteses usando a função "mark" e inserindo (\w+\d+:\w+\d+) para destacar todos os IDs entre parênteses, mas não posso manipulá-lo. Como observação, alguns dos nomes das proteínas têm outras strings entre parênteses (por exemplo, veja a primeira linha, em que o nome da proteína contém (Z) , bem como o valor da ID que eu quero). Eu não quero mantê-los.

    
por kevluv93 04.08.2015 / 19:17

2 respostas

1

Você pode fazer isso com uma pesquisa de expressão regular e substituir. Pressione Ctrl + H para abrir a caixa de diálogo Substituir. Verifique se o modo de pesquisa é Regular Expression .

Encontre o que:

(^[^\t\r\n]+\t)[^\t\r\n]+(\(\w+\d+:\w+\d+\))[^\t\r\n]*

Substitua por:


Explicação do padrão:

[^\t\r\n]+ é qualquer sequência de caracteres que não contém uma guia ou nova linha ou retornos de carro. Isso deve corresponder apenas ao texto em uma coluna do seu arquivo.

^[^\t\r\n]+ corresponde ao conteúdo da primeira coluna porque o ^ inicial limita a correspondência ao início de uma linha.

O primeiro grupo de captura (^[^\t\r\n]+\t) corresponde ao conteúdo do primeiro campo e da seguinte guia.

[^\t\r\n]+(\(\w+\d+:\w+\d+\))[^\t\r\n]* corresponde ao conteúdo do segundo campo e corresponde apenas se a expressão entre parênteses estiver presente.

O segundo grupo de captura (\(\w+\d+:\w+\d+\)) corresponde à expressão entre parênteses.

O padrão de substituição retorna o primeiro e o segundo grupo de captura. Isso exclui efetivamente o texto ao redor no segundo campo porque essa parte da correspondência não está incluída em um grupo de captura.

    
por 04.08.2015 / 20:25
0

Se o ID da proteína (entre parênteses) é sempre a última coisa na linha (como você mostrou), deve ser bom o suficiente para procurar por \t.*( (ou possivelmente \t[^\r\n]*( ) e substitua por \t( .

    
por 04.08.2015 / 20:41