Richard10 escribiste:Pero si ahora solo quisiera quedarme con los datos posteriores a Name=, es decir, de una línea
Dbxref=GeneID:128869,HGNC:HGNC:15791,HPRD:12250,MIM:608528;Name=PIGU
mantener únicamente PIGU en esa columna y los valores del resto de columnas.
Using bash Syntax Highlighting
perl -p -e 's/^.+;Name=([^\s"]+)"?/$1/' example.txt > salida.txt
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
En este caso, usamos como "ancla" el valor de 'Name=', y capturamos lo que le sigue, pero solo si no es ni espacios en blanco ni el carácter de comillas dobles.
Using text Syntax Highlighting
logFC logCPM PValue FDR IND.10.N.3_GCF NOTRAT.1_GCF IND.10.N.3_GCF NOTRAT.1_GCF DE Regulation
LOC105370384 953 516 0.885105148 437 0.904246783 437.0008964 953 516 44.79746355 31.18396657 90.42
PIGU 940 506 0.893523372 434 0.904221549 434.0009198 940 506 44.18637538 30.57962613 90.42
CHST12 416 212 0.972519264 204 0.904208933 204.0023181 416 212 19.55482144 12.81201727 90.42
ACSM1 851 455 0.903292587 396 0.904196316 396.0010302 851 455 40.00277175 27.4974899 90.42
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Richard10 escribiste:O bien solo los valores entre GeneID y HGNC, es decir, de una línea
Dbxref=GeneID:128869,HGNC:HGNC:15791,HPRD:12250,MIM:608528;Name=PIGU
obtener únicamente 128869 en esa columna y el resto intactas.
Using bash Syntax Highlighting
perl -p -e 's/^.*?Dbxref=GeneID:(.+?)[,;].+?(?=\s)/$1/' example.txt > salida.txt
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Aquí usamos de "ancla" para buscar lo que queremos la cadena 'Dbxref=GeneID:', y capturamos todo lo que le sigue, pero hasta encontrar el primer carácter ',' o ';', y agregamos a la búsqueda todo el resto del campo, hasta encontrar el primer carácter de espacio, que no agregaremos a la operación de sustitución.
Using text Syntax Highlighting
logFC logCPM PValue FDR IND.10.N.3_GCF NOTRAT.1_GCF IND.10.N.3_GCF NOTRAT.1_GCF DE Regulation
105370384 953 516 0.885105148 437 0.904246783 437.0008964 953 516 44.79746355 31.18396657 90.42
128869 940 506 0.893523372 434 0.904221549 434.0009198 940 506 44.18637538 30.57962613 90.42
55501 416 212 0.972519264 204 0.904208933 204.0023181 416 212 19.55482144 12.81201727 90.42
116285 851 455 0.903292587 396 0.904196316 396.0010302 851 455 40.00277175 27.4974899 90.42
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Estas son otras opciones, en las que seguimos un orden de operaciones.
Using bash Syntax Highlighting
perl -n -E 'print and next if not /^(.*?Dbxref.+?)(\s.+)$/; ($campo1, $resto) = ($1, $2); $campo1 =~ s/^"|"$//g; $campo1 =~ s/^.+?Name=(.+)/$1/; say "$campo1$resto";' example.txt > salida.txt
perl -n -E 'print and next if not /^(.*?Dbxref.+?)(\s.+)$/; ($campo1, $resto) = ($1, $2); $campo1 =~ s/^"|"$//g; $campo1 =~ s/^.+?GeneID:(.+?)(?=[,;]).+?$/$1/; say "$campo1$resto";' example.txt > salida.txt
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
En estos casos, hacemos una serie de operaciones comunes:
Using perl Syntax Highlighting
print and next if not /^(.*?Dbxref.+?)(\s.+)$/; # primero, imprimimos la línea y pasamos a la siguiente si el primer campo no contiene 'Dbxref')
($campo1, $resto) = ($1, $2); # luego, guardamos en dos variables las dos partes de la línea
$campo1 =~ s/^"|"$//g; # del primer campo, le quitamos las comillas, si las tuviera
$campo1 =~ s/^.+?Name=(.+)/$1/; # y ahora buscamos lo que queremos, y reducimos el primer campo a eso que encontremos
print "$campo1$resto\n"; # reconstruimos la salida
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4