Saltar al contenido principal
LibreTexts Español

1.9: Clasificación, Primera y Última Líneas

  • Page ID
    55201
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    \( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)

    ( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\id}{\mathrm{id}}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\kernel}{\mathrm{null}\,}\)

    \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\)

    \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\)

    \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    \( \newcommand{\vectorA}[1]{\vec{#1}}      % arrow\)

    \( \newcommand{\vectorAt}[1]{\vec{\text{#1}}}      % arrow\)

    \( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vectorC}[1]{\textbf{#1}} \)

    \( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)

    \( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)

    \( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)

    \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    \(\newcommand{\avec}{\mathbf a}\) \(\newcommand{\bvec}{\mathbf b}\) \(\newcommand{\cvec}{\mathbf c}\) \(\newcommand{\dvec}{\mathbf d}\) \(\newcommand{\dtil}{\widetilde{\mathbf d}}\) \(\newcommand{\evec}{\mathbf e}\) \(\newcommand{\fvec}{\mathbf f}\) \(\newcommand{\nvec}{\mathbf n}\) \(\newcommand{\pvec}{\mathbf p}\) \(\newcommand{\qvec}{\mathbf q}\) \(\newcommand{\svec}{\mathbf s}\) \(\newcommand{\tvec}{\mathbf t}\) \(\newcommand{\uvec}{\mathbf u}\) \(\newcommand{\vvec}{\mathbf v}\) \(\newcommand{\wvec}{\mathbf w}\) \(\newcommand{\xvec}{\mathbf x}\) \(\newcommand{\yvec}{\mathbf y}\) \(\newcommand{\zvec}{\mathbf z}\) \(\newcommand{\rvec}{\mathbf r}\) \(\newcommand{\mvec}{\mathbf m}\) \(\newcommand{\zerovec}{\mathbf 0}\) \(\newcommand{\onevec}{\mathbf 1}\) \(\newcommand{\real}{\mathbb R}\) \(\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}\) \(\newcommand{\laspan}[1]{\text{Span}\{#1\}}\) \(\newcommand{\bcal}{\cal B}\) \(\newcommand{\ccal}{\cal C}\) \(\newcommand{\scal}{\cal S}\) \(\newcommand{\wcal}{\cal W}\) \(\newcommand{\ecal}{\cal E}\) \(\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}\) \(\newcommand{\gray}[1]{\color{gray}{#1}}\) \(\newcommand{\lgray}[1]{\color{lightgray}{#1}}\) \(\newcommand{\rank}{\operatorname{rank}}\) \(\newcommand{\row}{\text{Row}}\) \(\newcommand{\col}{\text{Col}}\) \(\renewcommand{\row}{\text{Row}}\) \(\newcommand{\nul}{\text{Nul}}\) \(\newcommand{\var}{\text{Var}}\) \(\newcommand{\corr}{\text{corr}}\) \(\newcommand{\len}[1]{\left|#1\right|}\) \(\newcommand{\bbar}{\overline{\bvec}}\) \(\newcommand{\bhat}{\widehat{\bvec}}\) \(\newcommand{\bperp}{\bvec^\perp}\) \(\newcommand{\xhat}{\widehat{\xvec}}\) \(\newcommand{\vhat}{\widehat{\vvec}}\) \(\newcommand{\uhat}{\widehat{\uvec}}\) \(\newcommand{\what}{\widehat{\wvec}}\) \(\newcommand{\Sighat}{\widehat{\Sigma}}\) \(\newcommand{\lt}{<}\) \(\newcommand{\gt}{>}\) \(\newcommand{\amp}{&}\) \(\definecolor{fillinmathshade}{gray}{0.9}\)

    Continuando con los ejemplos fasta_stats del capítulo 8, “The Standard Stream”, la séptima columna de la salida contiene la longitud de la repetición perfecta más larga, en caracteres.

    I.9_1_UNIX_113_UNIT_AT_Script

    ¿Qué secuencia contiene la repetición perfecta más larga? Para responder a esta pregunta, podríamos considerar ordenar las líneas de acuerdo a esta séptima columna. (Primero, tendremos que eliminar las propias líneas de cabecera, lo que podemos lograr filtrando líneas que coincidan con # usando la bandera -v de grep, o grepping para unit:, como en el capítulo 8.) Ingresa sort, que s orta líneas de un archivo de texto (o de entrada estándar) por columnas especificadas: sort <file>or... | sort.

    Por defecto, ordena por todas las columnas, comparando las líneas completas en “diccionario” u orden lexicográfico. Para ordenar por columnas específicas, necesitamos usar una sintaxis bastante sofisticada. Ilustraremos con una figura.

    I.9_2_sort_sintaxis

    La utilidad sort toma muchos parámetros potenciales, aunque los más importantes son los parámetros -k que especifican las columnas por las cuales ordenar y cómo se debe hacer esa clasificación, y ocasionalmente el indicador -u. Los parámetros -k (clave) se consideran en orden; lo anterior especifica que la clasificación debe hacerse en las columnas 2 a 4 (conglomeradas en una sola “columna”), considerándolas en orden de diccionario, y ordenándolas a la inversa. En el caso de los vínculos, sólo la primera columna se considera en orden normal de diccionario, y en el caso de vínculos adicionales, la quinta columna se considera en orden numérico. [1] (La diferencia entre el orden n y g es que g puede manejar entradas en notación científica como 1e-6, pero generalmente se prefiere n porque es más rápido y no está sujeto a pequeños errores de redondeo).

    El indicador opcional -u (que puede especificarse antes o después de las claves, o incluso mezclarse) especifica que después de que se consideren todas las claves, si todavía hay vínculos entre filas, entonces solo se debe emitir la primera fila. Solo genera líneas “únicas” de acuerdo con el orden general de clasificación.

    Por defecto, sort utiliza espacios en blanco como separador de columnas, aunque se puede cambiar (ejecutar man sort para obtener más información). Para ver información sobre la repetición perfecta más larga, usaremos sort -k7,7nr, indicando que deseamos ordenar solo en la séptima columna, en orden numérico inverso.

    I.9_3_UNIX_114_SORT_LARGEST_REPETIR

    Las primeras líneas de salida indican que la repetición perfecta más larga es de 94 bases de largo y ocurre en la secuencia PZ805359 (el contenido GC de esta secuencia es 0, porque está compuesta completamente por una repetición AT larga).

    I.9_4_UNIX_115_SORT_LONGEST_REPETIR_OUT

    Los resultados también indican que hay una serie de lazos; varias secuencias contienen repeticiones perfectas de longitud 18 pares de bases. Si solo quisiéramos reportar una secuencia por diferente longitud de repetición, podríamos intentar ordenar -k7,7nr -u. Alternativamente, podríamos modificar nuestro tipo para ordenar secundariamente por contenido GC (segunda columna), ordenar -k7,7nr -k2,2g.

    Un truco útil es realizar dos tipos: uno que inicialmente ordena los datos según los criterios que se deseen, y otro que obtenga solo la primera línea de un grupo en función de criterios secundarios. Es posible que deseemos reportar solo la secuencia de contenido de GC más alta por diferente longitud de repetición, por ejemplo. Inicialmente podemos usar un sort -k7,7nr -k2,2gr para ordenar por longitud de repetición y romper lazos por contenido de GC, dejando las secuencias de mayor contenido de GC en la parte superior. A partir de ahí, podemos usar un sort -k7,7nr -u para reordenar los datos (¡aunque ya estén ordenados!) por la séptima columna, manteniendo solo la línea superior por longitud de repetición.

    I.9_5_Unix_116_Double_sort_1

    Salida:

    I.9_6_Unix_117_double_sort_1_out

    Sin embargo, hay una pequeña preocupación: ¿cómo podemos estar seguros de que nuestro cuidadoso pedido por contenido de GC no se deshizo en el segundo tipo? Después de todo, el segundo tipo sería técnicamente libre para reordenar los lazos de acuerdo con la séptima columna, resultando en una salida incorrecta. Hay una bandera adicional para sort, la bandera -s, que indica que se debe usar la clasificación estable. La clasificación estable significa que, en el caso de las ataduras, los elementos se dejan en su orden original. Entonces, para estar seguros, podríamos usar una especie secundaria de tipo -k7,7nr -u -s, aunque una lectura cuidadosa de la documentación para sort indica que en la mayoría de los sistemas la bandera -u implica la bandera -s.

    Primera y Última Línea

    Las utilidades de cabeza y cola, como las otras cubiertas anteriormente, escriben su salida en la salida estándar, y así se pueden usar dentro de tuberías. A menudo se emplean para inspeccionar el inicio o el final de un archivo (para verificar resultados o formatear). También suelen extraer conjuntos de datos de prueba. Por ejemplo, head -n 40000 input.fastq > test.fastq extraería los primeros 10,000 registros de secuencia de input.fastq y produciría test.fastq (porque cada cuatro líneas de un archivo de secuencia FASTQ representa información para una sola secuencia).

    I.9_7_UNIX_118_FASTQ_Muestra

    Lo anterior muestra las primeras 12 líneas de un archivo FASTQ generado en un Illumina HiSeq 2000. La primera línea de cada conjunto de cuatro representa un identificador para la secuencia leída, la segunda línea contiene la secuencia misma, la tercera línea a menudo no se usa (conteniendo solo un +, aunque puede ser seguida por el identificador y otros datos opcionales), y la cuarta línea contiene la “calidad” de cada base en la secuencia codificada como un carácter. (La codificación ha variado en el pasado, pero en los últimos años, las compañías de secuenciación han estandarizado la codificación utilizada por las máquinas de secuenciación Sanger).

    Con un poco de sintaxis modificada, tail también se puede usar para extraer todas las líneas de un archivo comenzando en una línea dada. Como ejemplo, tail -n +5 input.fastq > test.fastq resultaría en test.fastq teniendo todo menos el primer registro de secuencia de input.fastq (es decir, comenzando en la quinta línea). Esta característica es especialmente útil para eliminar líneas de encabezado de salida o archivos antes de su posterior procesamiento, como en. /fasta_stats pz_cdnas.fasta | tail -n +9, en lugar de usar grep -v '#' arriba.

    Ejercicios

    1. Ejecutando fasta_stats en pz_cdnas.fasta, la séptima columna representa la longitud de la repetición perfecta más larga que se encuentra en cada secuencia. Use solo grep, sort, wc, head y tail para determinar el valor mediano en esta columna. (Es posible que deba ejecutar varios comandos o canalizaciones).
    2. Ejecutando fasta_stats en pz_cdnas.fasta, ¿cuántas unidades diferentes de repetición perfecta (columna seis) se encuentran?
    3. El archivo pz_blastx_yeast_top10.txt es el resultado de ejecutar blastx -query.. /fasta_stats/pz_cdnas.fasta -db orf_trans -evalue 1e-6 -max_target_seqs 10 -max_hsps 1 -outfmt 7 -out pz_blastx_yeast_top1.txt. Aparte de las líneas de “comentario” que comienzan con #, la primera columna es la ID de consulta, la segunda la ID de destino (levadura), la tercera la identidad porcentual del HSP, la undécima el valor E y la duodécima la “puntuación de bits”. ¿Qué ID de consulta tuvo el bitscore más grande? ¿Cuántas secuencias de consulta diferentes (entradas en la primera columna) tenían uno o más HSP contra la base de datos?
    4. Extraiga de pz_blastx_yeast_top10.txt un archivo llamado pz_blastx_yeast_top1.txt que contenga solo la línea HSP de valor E más pequeña por ID de consulta. (Puede eliminar las líneas de comentarios que comiencen por # por completo.)

    1. Una palabra de precaución: si una columna contiene una entrada que no puede interpretarse como un número entero o general, se tratará como 0 en el orden de clasificación.

    This page titled 1.9: Clasificación, Primera y Última Líneas is shared under a CC BY-NC-SA license and was authored, remixed, and/or curated by Shawn T. O’Neil (OSU Press) .