Lo que quiero lograr:
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 ATTTATGCCGTTGGCCACGAATTCAGAATCATATTARendimiento esperado
>Contig_0 99995 >Contig_11 42Con 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.
Quizás esto, combinando grep y awk:
awk -F '[ :]' '$2 == "length" {print $1, $3}' file | sort ...Suposiciones:
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,1VDonde:
-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 espacioslength: - 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ónEsto genera:
>Contig_0 99995 >Contig_17 93 >Contig_8 42 >Contig_11 42