Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

312
Vistas
Pipe awk y grep para guardar un campo particular de un archivo

Lo que quiero lograr:

  • grep: extrae líneas con el número y la longitud de contig
  • awk: eliminar "longitud:" de la columna 2
  • ordenar: ordenar por longitud (en orden descendente)

Código actual

 grep "length:" test_reads.fa.contigs.vcake_output | awk -F:'{print $2}' |sort -g -r > contig.txt

Ejemplo de contenido de test_reads.fa.contigs.vcake_output :

 >Contig_11 length:42 ACTCTGAGTGATCTTGGCGTAATAGGCCTGCTTAATGATCGT >Contig_0 length:99995 ATTTATGCCGTTGGCCACGAATTCAGAATCATATTA

Rendimiento esperado

 >Contig_0 99995 >Contig_11 42
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Con las muestras mostradas, intente seguir la solución awk + sort aquí.

 awk -F'[: ]' '/^>/{print $1,$3}' Input_file | sort -nrk2

Explicación: la explicación simple sería ejecutar el programa awk para leer Input_file primero, donde establecer el separador de campo como : O espacio y verificar la condición si la línea comienza desde > luego imprimir su primer y segundo campo y luego enviar su salida (como una entrada estándar) para sort comando donde ordenarlo desde el segundo campo para obtener el resultado requerido.

over 4 years ago · Santiago Trujillo Denunciar

0

Quizás esto, combinando grep y awk:

 awk -F '[ :]' '$2 == "length" {print $1, $3}' file | sort ...
over 4 years ago · Santiago Trujillo Denunciar

0

Suposiciones:

  • si más de una fila tiene la misma longitud, ordene adicionalmente la primera columna usando la ordenación de 'versión'

Agregar algunas líneas adicionales a la entrada de muestra:

 $ cat test_reads.fa.contigs.vcake_output >Contig_0 length:99995 ATTTATGCCGTTGGCCACGAATTCAGAATCATATTA >Contig_11 length:42 ACTCTGAGTGATCTTGGCGTAATAGGCCTGCTTAATGATCGT >Contig_17 length:93 ACTCTGAGTGATCTTGGCGTAATAGGCCTGCTTAATGATCGT >Contig_837 ignore-this-length:1000000 ACTCTGAGTGATCTTGGCGTAATAGGCCTGCTTAATGATCGT >Contig_8 length:42 ACTCTGAGTGATCTTGGCGTAATAGGCCTGCTTAATGATCGT

Una idea sed/sort :

 $ sed -rn 's/(>[^ ]+) length:(.*)$/\1 \2/p' test_reads.fa.contigs.vcake_output | sort -k2,2nr -k1,1V

Donde:

  • -En : habilita la compatibilidad extendida con expresiones regulares y suprime la impresión normal de los datos de entrada
  • (>[^ ])+) - (primer grupo de captura) - > seguido de 1 o más caracteres que no sean espacios
  • length: - espacio seguido de length:
  • (.*) - (segundo grupo de captura) - 0 o más caracteres (después de los dos puntos)
  • $ - fin de línea
  • \1 \2/p - imprime el primer grupo de captura + <space> + segundo grupo de captura
  • -k2,2nr - ordenar por segundo campo r delimitado por espacios n en orden numérico inverso
  • -k1,1V - V por el primer campo (delimitado por espacios) en el orden de la versión

Esto genera:

 >Contig_0 99995 >Contig_17 93 >Contig_8 42 >Contig_11 42
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda