Lo siento si esta es una pregunta duplicada, pero no pude encontrar la respuesta que busco aquí o en la documentación.
Tengo un archivo que se parece al siguiente:
chr2_oligo1234 700 750
chr2_oligo1236 750 800
chr1_oligo1 50 100
chr1_oligo256 150 200
chr1_oligo6 3500 3550
chr4_oligo95 50 100
chr5_oligo1 50 100
chr4_oligo4 150 200
El resultado deseado se parece a:
chr1_oligo1 50 100
chr1_oligo256 150 200
chr1_oligo6 3500 3550
chr2_oligo1234 700 750
chr2_oligo1236 750 800
chr4_oligo95 50 100
chr4_oligo4 150 200
chr5_oligo1 50 100
El patrón al principio (por ejemplo, chr#_oligo#) solo importa en términos de chr#, lo que significa que todo chr1 debe ser primero, luego chr2, luego chr3, etc., pero me gustaría ordenar esas subcadenas numéricamente en grupos como mostrado por el resultado deseado arriba. Entonces, me gustaría saber cómo ordenar alfabéticamente en el caso de la primera columna y luego, manteniendo ese orden (chr1->chrN), ordenar cada fragmento de datos numéricamente.
Pido disculpas si mi redacción no es la mejor para este tema o si está duplicada. Intentando
sort -k1,1 -nk2
ordena numéricamente correctamente, pero no mantiene intacta la primera clasificación (confunde la primera columna y junta todas las líneas con las columnas 2 y 3 como:
50 100
Estoy usando Mac OS X.
EDITAR: Quiero cambiar algunos de los ejemplos en la primera columna para mostrar más de lo que estoy buscando. gsort -V funcionó muy bien si el nombre en la primera columna está en orden numérico, pero en mi conjunto de datos, no siempre es así.
Básicamente, me gustaría ordenar cada subgrupo (en este caso, chr1, chr2, etc.) por la columna 2 de forma iterativa. Me doy cuenta de que esto se puede hacer fácilmente haciendo un grep para cada uno y luego ordenándolo en la columna 2, pero me gustaría saber si sort u otro comando de Unix podría lograr esto por sí solo.
Respuesta1
sort -k1,1 -nk2
es lo mismo que sort -k1,1 -n -k2
, igual que sort -n -k1,1 -k2
, como en elnuméricoLa clasificación está activada globalmente, para todas las claves.
Para ordenar la segunda clave solo numéricamente, debe agregar n
a esa clave de clasificación una descripción como en:
sort -k1,1 -k2n
O:
sort -k1,1 -k2,2n
Con n
y con el separador de campos predeterminado 2
es lo mismo 2,2
. 2
sería la parte de la línea que comienza desde el segundo campo, pero cuando se interpreta como un número, es lo mismo que el segundo campo solo ( 2,2
).
Aquí, también puede ordenar numéricamente el número que está después chr
y luego alfabéticamente el resto del primer campo y luego numéricamente el segundo campo con:
sort -k1.4n -k1,1 -k2n
Respuesta2
ordenar alfabéticamente en el primer campo y numéricamente en el segundo da (en su salida, - chr4_oligo95 está antes de ch4_oligo4)
sort -k1,1 -k2n,2n file
chr1_oligo1 50 100
chr1_oligo256 150 200
chr1_oligo6 3500 3550
chr2_oligo1234 700 750
chr2_oligo1236 750 800
chr4_oligo4 150 200
chr4_oligo95 50 100
chr5_oligo1 50 100