una ultimos texto solo quitar partir parte numeros letras extraer especiales espacios entre eliminar después cómo con como celda caracteres caracter antes r unix replace sed awk

ultimos - Eliminar todo el texto antes del colon



excel extraer texto a partir de un caracter (9)

A continuación hay 2 soluciones equivalentes:

El primero usa la característica de autofecilación de perl para dividir cada línea en campos usando : poblar el conjunto de campos F e imprimir el segundo campo $F[1] (contado a partir del campo 0)

perl -F: -lane ''print $F[1]'' file

El segundo usa una expresión regular para sustituir s/// desde ^ el comienzo de la línea .*: Cualquier carácter que termine con dos puntos, sin nada

perl -pe ''s/^.*://'' file

Tengo un archivo que contiene una cierta cantidad de líneas. Cada línea se ve así:

TF_list_to_test10004/Nus_k0.345_t0.1_e0.1.adj:PKMYT1

Me gustaría eliminar todo el carácter anterior a ":" para retener solo PKMYT1 que es un nombre de gen. Como no soy un experto en scripting regex, ¿alguien puede ayudarme a hacer esto usando Unix (sed o awk) o en R?


Aquí hay dos formas de hacerlo en R:

foo <- "TF_list_to_test10004/Nus_k0.345_t0.1_e0.1.adj:PKMYT1" # Remove all before and up to ":": gsub(".*:","",foo) # Extract everything behind ":": regmatches(foo,gregexpr("(?<=:).*",foo,perl=TRUE))


Ciertamente hay más de 2 formas en R. Aquí hay otra.

unlist(lapply(strsplit(foo, '':'', fixed = TRUE), ''['', 2))

Si la cadena tiene una longitud constante, imagino que substr sería más rápido que este o los métodos regex.


Estaba trabajando en un problema similar. El consejo de John y Josh O''Brien fue el truco. Empecé con este tibble:

library(dplyr) my_tibble <- tibble(Col1=c("ABC:Content","BCDE:MoreContent","FG:Conent:with:colons"))

Parece que:

| Col1 1 | ABC:Content 2 | BCDE:MoreContent 3 | FG:Content:with:colons

Necesitaba crear este tibble:

| Col1 | Col2 | Col3 1 | ABC:Content | ABC | Content 2 | BCDE:MoreContent | BCDE | MoreContent 3 | FG:Content:with:colons| FG | Content:with:colons

Y lo hizo con este código (R versión 3.4.2).

my_tibble2 <- mutate(my_tibble ,Col2 = unlist(lapply(strsplit(Col1, '':'',fixed = TRUE), ''['', 1)) ,Col3 = gsub("^[^:]*:", "", Col1))


Puedes usar awk así:

awk -F: ''{print $2}'' /your/file


Si tiene GNU coreutils disponibles use use cut :

cut -d: -f2 infile


Un movimiento muy simple que me perdí de la mejor respuesta @Sacha Epskamp fue usar la función secundaria, en este caso para tomar todo antes del ":" (en lugar de eliminarlo), así que fue muy simple:

foo <- "TF_list_to_test10004/Nus_k0.345_t0.1_e0.1.adj:PKMYT1" # 1st, as she did to remove all before and up to ":": gsub(".*:","",foo) # 2nd, to keep everything before and up to ":": gsub(":.*","",foo)

Básicamente, lo mismo, simplemente cambie la posición ":" dentro del argumento secundario. Espero que ayude


Una expresión regular simple utilizada con gsub() :

x <- "TF_list_to_test10004/Nus_k0.345_t0.1_e0.1.adj:PKMYT1" gsub(".*:", "", x) "PKMYT1"

Consulte ?regex ?gsub o ?gsub para obtener más ayuda.


Usando sed:

sed ''s/.*://'' < your_input_file > output_file

Esto reemplazará cualquier cosa seguida de dos puntos sin nada, por lo que eliminará todo, incluidos los últimos puntos en cada línea ( porque * es codicioso de forma predeterminada ).

Según el comentario de Josh O''Brien, si solo desea reemplazar hasta los primeros dos puntos, haga esto:

sed "s/[^:]*://"

Eso coincidirá con cualquier cosa que no sea un colon, seguido de un punto y no se reemplazará con nada.

Tenga en cuenta que para ambos patrones se detendrán en la primera coincidencia de cada línea. Si desea hacer una sustitución por cada coincidencia en una línea, agregue la opción '' g '' (global) al final del comando.

También tenga en cuenta que en Linux (pero no en OSX) puede editar un archivo in situ con -i por ejemplo:

sed -i ''s/.*://'' your_file