Eliminar todo lo que esté en la segunda columna que no esté entre paréntesis

Eliminar todo lo que esté en la segunda columna que no esté entre paréntesis

Tengo un archivo que se parece a este:

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

El archivo está delimitado por tabulaciones; hay una pestaña entre la primera columna (ID del gen) y la segunda columna (nombre de la proteína). (El nombre de la proteína puede contener espacios, pero no tabulaciones). El nombre de la proteína contiene una cadena entre paréntesis, por ejemplo, (PTHR33076:SF11); esta es la proteínaIDENTIFICACIÓN. Quiero conservar la primera columna y eliminar todo lo que hay en la segunda columna excepto el ID de la proteína (y los paréntesis que la contienen). Entonces la salida se vería así:

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

¿Cómo puedo hacer esto? Marqué todas las ID entre paréntesis usando la función "marcar" e ingresé (\w+\d+:\w+\d+)para resaltar todas las ID entre paréntesis, pero no puedo manipularlo. Como nota, algunos de los nombres de las proteínas tienen otras cadenas entre paréntesis (por ejemplo, consulte la primera fila, donde contiene el nombre de la proteína (Z)y el valor de ID que deseo). No quiero conservarlos.

Respuesta1

Puede hacer esto con una búsqueda y reemplazo de expresiones regulares. Presione Ctrl+ Hpara abrir el cuadro de diálogo Reemplazar. Asegúrese de que el modo de búsqueda sea Regular Expression.

Encontrar que:

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

Reemplazar con:

\1\2

Explicación del patrón:

[^\t\r\n]+es cualquier cadena de caracteres que no contiene tabulación, nueva línea o retornos de carro. Esto debería coincidir sólo con el texto de una columna de su archivo.

^[^\t\r\n]+coincide con el contenido de la primera columna porque el inicio ^limita la coincidencia al inicio de una línea.

El primer grupo de captura (^[^\t\r\n]+\t)coincide con el contenido del primer campo y la siguiente pestaña.

[^\t\r\n]+(\(\w+\d+:\w+\d+\))[^\t\r\n]*coincide con el contenido del segundo campo y solo coincide si la expresión entre paréntesis está presente.

El segundo grupo de captura (\(\w+\d+:\w+\d+\))coincide con la expresión entre paréntesis.

El patrón de reemplazo \1\2devuelve el primer y segundo grupo de captura. Esto elimina efectivamente el texto circundante en el segundo campo porque esa parte de la coincidencia no está incluida en un grupo de captura.

Respuesta2

Si la identificación de la proteína (entre paréntesis) es siempre lo último en la línea (como ha mostrado), debería ser suficiente para buscarla \t.*( (o posiblemente \t[^\r\n]*() y reemplazarla con \t(.

información relacionada